0%

java-tcp套接字编程

什么是套接字传送们维基百科

java中的套接字屏蔽了许多细节,不需要关注更多的底层信息。
在java中套接字服务器可以使用java.net.ServerSocket创建
一个常用的构造方法如下:

1
ServerSocket server = new ServerSocket(int	port);

port: 表示套接字服务器需要监听的本机的端口,常见的端口有 80 端口,3306 端口等,这个监听的端口不允许重复监听,建议使用靠后面的端口号
然后可以使用 Socket client = server.accept() 等待客户端的连接并返回一个 Socket 对象,通过这个 Socket 对象可以和客户端进行通信:

1
2
OutputStream out = client.getOutputStream();
InputStream in = client.getInputStream();

out 可以向客户端输出消息,in 可以接受客户端的消息(消息的输入和输出都是相对于内存而言的,如果是写入内存中,那么就是输入,如果是从内存中读出,那么就是输出)

服务器一般都是长时间运行服务多个客户端,所以服务器一般不会关闭,在客户端和服务器中端连接时,只需要关闭输入输出流就行了。

套接字客户端的创建使用 Socket 创建,需要指定要连接的 ip 地址和端口,这个端口要和套接字服务器监听的端口号相同,ip 地址要和套接字服务器所在主机的 ip 地址相同,linux 下可以使用 ifconfig 命令查看 ip 地址,如果是在本机进行套接字编程,可以使用 127.0.0.1 或者 localhost 确定本机 ip

1
Socket socket = new Socket(Stirng ipAddress,int port);

创建套接字之后就可以获取输入输出流和服务器交流,这里的输入输出流是相对于客户端的输入输出,客户端的输入是服务器端的输出。

客户端不同于服务器,客户端关闭时需要关闭 Socket,使用 socket.close() 关闭

一个简单的服务器 Socket:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//创建套接字服务器
ServerSocket server = new ServerSocket(int port);
//套接字服务器一般不会关闭,所以使用死循环不同的获取连接,在获取客户端连接是一般要开线程
while(true){
//获取客户端连接
Socket socket = server.accept();
//获取输入输出流,按情况获取,如果即需要输入也需要输出那么两个都需要获取,io可以包装成Reader和Writer
OutputStream out = socket.getOutputStream();//获取输出流
InputStream in = socket.getInputStream();//获取输入流
//进行消息的获取或发送
//...
//关闭输入输出流
out.close();
in.close();
}

简单的客户端套接字:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//创建客户端套接字
Socket socket = new Socket(String serverIp,int port);
//获取输入输出流(一般来说客户端都是会先获取输出流发送消息到服务器,服务器返回消息,客户端使用输入流获取)
OutputStream out = socket.getOutputStream();
InputStream in = socket.getInputStream();
//进行消息的发送与接收,可以使用死循环,在循环使用特殊字符串之类的东西退出
while(true){
//flag;
//发送和接受
}
//关闭输入输出流
out.close();
in.close();
//关闭套接字
socket.close();

参考源码