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(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。