Java Socket底层采用TCP/IP协议通信,通信细节被封装,我们仅仅需要指定IP、端口,便能轻易地创建TCP或UDP连接,进行网络通信。数据的读写,可以使用我们熟悉的stream进行操作。
TCP通信中,服务端与客户端是一对多的关系,如下图
Client发起连接请求后,Server端响应并创建一个Socket实例,与Client端一对一通信。通信完毕后,Client端与Server端的Socket实例各自关闭连接并销毁,此次通信结束。
发起连接的三次握手和关闭连接的四次挥手过程暂且不表,后续文章详细介绍。下面看具体代码
服务端代码
package com.coshaho.learn.socket;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
/**
* SocketServer.java Create on 2017年12月16日 下午11:42:03
* 类功能说明: socket服务端
* @Author coshaho
*/
public class SocketServer
{
public static void main(String[] args) throws Exception
{
// 创建服务端
ServerSocket server = new ServerSocket(10000);
// 服务端阻塞式监听客户端连接请求
// 接收到连接请求,则创建一个socket实例,与客户端通信
Socket client = server.accept();
// 获取InputStream读取数据
InputStream in = client.getInputStream();
byte[] b = new byte[1024];
// 客户端关闭输出流后服务端会读取到-1标志
while(-1 != in.read(b))
{
System.out.println(new String(b));
}
// 获取OutputStream输出数据
OutputStream out = client.getOutputStream();
out.write("hello, client".getBytes());
// 输出结束,关闭输出流
client.shutdownOutput();
System.out.println("Server close. " + System.currentTimeMillis());
server.close();
}
}
客户端代码
package com.coshaho.learn.socket;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
/**
* SocketClient.java Create on 2017年12月16日 下午11:42:53
* 类功能说明: socket客户端
* @Author coshaho
*/
public class SocketClient
{
public static void main(String[] args) throws Exception
{
// 请求连接服务端,握手成功,返回Socket实例
Socket client = new Socket("127.0.0.1",10000);
// 获取输入输出流,读写数据(与服务端数据读写操作相同)
InputStream in = client.getInputStream();
OutputStream out = client.getOutputStream();
out.write("hello, server".getBytes());
client.shutdownOutput();
byte[] b = new byte[1024];
while(-1 != in.read(b))
{
System.out.println(new String(b));
}
System.out.println("Client close. " + System.currentTimeMillis());
client.close();
}
}
原文链接:https://www.qiquanji.com/post/7975.html
本站声明:网站内容来源于网络,如有侵权,请联系我们,我们将及时处理。
微信扫码关注
更新实时通知