近来感觉秋招无望,学习Socket的时候,便做了个基于Socket的群聊工具;
先看看最终效果吧
项目GitHub通道(详细代码请自行copy)
如何利用Socket通信
socket又称为“套接字”,建立网络通信连接至少要一对端口号(socket)。socket本质是编程接口(API),对TCP/IP的封装,TCP/IP也要提供可供程序员做网络开发所用的接口,这就是Socket编程接口;HTTP是轿车,提供了封装或者显示数据的具体形式;Socket是发动机,提供了网络通信的能力。 ——来自百度百科
socket通信步骤(TCP)
1.建立SocketServer(服务端) 和 Socket (客户端)
2.打开两个端之间的输入输出流
3.进行读写操作
4.关闭socket与流
先来看第一步
SocketServer 与 Socket都是 java.net包里的,进行TCP通信的时候需要建立客户端与服务端。SocketServer 通过绑定端口(Port)来实现监听,而Socket则是指定服务端端口(Port)与地址(IP)。
下面来看一个简单的通信例子
//Server部分
ServerSocket server = new ServerSocket(6063);//实例化(传入端口号)
Socket s = server.accept();//调用accept接收socket
BufferedReader in =
new BufferedReader(new InputStreamReader(s.getInputStream()));//获得socket的输入流(同样的,可以通过getOutput
Stream来获取输出流)
while((msg= in.readLine())!=null){
System.out.println(msg);
}
in.close();
s.close();
//Client
Socket s = new Socket("192.168.1.133",6063);//实例化Socket传入指定服务端地址和端口号
System.out.println("客户端启动...");
BufferedReader re = new BufferedReader(new InputStreamReader(System.in));//用输入流读取键盘的输入
PrintWriter pw = new PrintWriter(s.getOutputStream(),true);//获取socket的输出流,第二个参数表示会自动flush
String msg2;
while(true){
msg2 = re.readLine();
pw.println(msg2);//输出(自动flush)
}
这样我们就简单了实现了socket通信
当然要实现即时聊天并非这么几行就能搞定的。
即时聊天,重点在于流的控制,需要开辟多条线程去分别做不同的事情。
下面来本次项目的PC服务端代码
PCServer端代码
public class Server implements Runnable