Java使用TCP套接字实现多人聊天功能详解
本文实例讲述了Java使用TCP套接字实现多人聊天功能。分享给大家供大家参考,具体如下:
废话不多说,直接开搞:
先创建一个服务端:
packageinterWebWriterEven2; importjava.net.ServerSocket; importjava.net.Socket; importjava.util.ArrayList; /** *服务端 *@author * */ publicclassServiceT{ staticArrayListlist=newArrayList (); publicstaticvoidmain(String[]args){ ServerSocketserver; try{ server=newServerSocket(9999); while(true){ Socketsocket=server.accept(); System.out.println(socket.getInetAddress().getHostName()+"连接成功。IP:"+socket.getInetAddress().getHostAddress()); list.add(socket); ServiceThreadTt=newServiceThreadT(socket); t.start(); } }catch(Exceptione){ //TODOAuto-generatedcatchblock e.printStackTrace(); } } }
接着是服务端的线程:
packageinterWebWriterEven2; importjava.io.BufferedReader; importjava.io.BufferedWriter; importjava.io.FileOutputStream; importjava.io.InputStreamReader; importjava.io.OutputStreamWriter; importjava.net.Socket; /** *服务端线程 *@author * */ publicclassServiceThreadTextendsThread{ privateSocketsocket; publicSocketgetSocket(){ returnsocket; } publicvoidsetSocket(Socketsocket){ this.socket=socket; } publicServiceThreadT(Socketsocket){ super(); this.socket=socket; } @Override publicvoidrun(){ try{ @SuppressWarnings("resource") BufferedWriterwFile=newBufferedWriter(newOutputStreamWriter(newFileOutputStream("D://messagesT.txt",true))); BufferedReaderbr=newBufferedReader(newInputStreamReader(socket.getInputStream())); StringstrOut=""; StringstrIn=""; while(true){ strIn=socket.getInetAddress().getHostName()+":"+br.readLine(); strOut=strIn; wFile.write(strIn); wFile.newLine(); wFile.flush(); for(Socketsoc:ServiceT.list){ if(soc!=socket){ BufferedWriterbw=newBufferedWriter(newOutputStreamWriter(soc.getOutputStream())); bw.write(strOut); System.out.println(strOut); bw.newLine(); bw.flush(); } } } }catch(Exceptione){ //TODOAuto-generatedcatchblock e.printStackTrace(); } } }
然后是客户端(应用端):
packageinterWebWriterEven2; importjava.io.BufferedReader; importjava.io.InputStreamReader; importjava.net.Socket; /** *客户端 *@author * */ publicclassClientT{ publicstaticvoidmain(String[]args){ try{ Socketsocket=newSocket("127.0.0.1",9999); ClientThreadTt=newClientThreadT(socket); t.start(); BufferedReaderbr=newBufferedReader(newInputStreamReader(socket.getInputStream())); StringstrIn=""; while(true){ strIn=br.readLine(); System.out.println(strIn); } }catch(Exceptione){ //TODOAuto-generatedcatchblock e.printStackTrace(); } } }
最后是客户端的线程:
packageinterWebWriterEven2; importjava.io.BufferedWriter; importjava.io.IOException; importjava.io.OutputStreamWriter; importjava.net.Socket; importjava.util.Scanner; /** *客户端的线程 *@author * */ publicclassClientThreadTextendsThread{ privateSocketsocket; publicSocketgetSocket(){ returnsocket; } publicvoidsetSocket(Socketsocket){ this.socket=socket; } publicClientThreadT(Socketsocket){ super(); this.socket=socket; } @Override publicvoidrun(){ @SuppressWarnings("resource") Scannersc=newScanner(System.in); try{ BufferedWriterbw=newBufferedWriter(newOutputStreamWriter(socket.getOutputStream())); while(true){ System.out.println(); bw.write(sc.nextLine().trim()); bw.newLine(); bw.flush(); } }catch(IOExceptione){ //TODOAuto-generatedcatchblock e.printStackTrace(); } } }
先运行服务端哦,否则将会报空指针异常的。
更多关于java相关内容感兴趣的读者可查看本站专题:《JavaSocket编程技巧总结》、《Java文件与目录操作技巧汇总》、《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》和《Java缓存操作技巧汇总》
希望本文所述对大家java程序设计有所帮助。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。