TCP客户端与服务器的实现

TCP客户端与服务器交互实现
本文档展示了如何实现TCP通信的客户端和服务器端。客户端通过Socket连接服务器,并发送消息;服务器端通过ServerSocket监听,接收客户端消息并回应。代码详细说明了从建立连接到数据传输的整个过程。

/*
TCP的客户端(TCP通信的两边分别是客户端和服务器)

在Java中,有一个类叫做Socket,这个类就表示TCP通信的客户端。

Socket的构造方法:
    Socket(String host, int port):参数host表示目标服务器的ip地址。 参数port表示目标服务器程序的端口号

Socket的其他方法:
    OutputStream getOutputStream(): 用于获取输出流对象, 该输出流用于向目的地写(发送)数据。
    InputStream getInputStream(): 用于获取输入流对象, 该输入流用于读取(接收)目的地程序发送过来的数据。
    void close(): 释放资源

TCP客户端的实现步骤:
    1. 创建Socket对象,表示客户端。
    2. 通过Socket对象调用getOutputStream获取一个输出流,用来发送数据。
    3. 通过输出流向服务器发送(写)数据
    4. 通过Socket对象调用getInputStream获取一个输入流, 用来接收数据。
    5. 通过输入流接收服务器发送过来的数据。
    6. 释放资源。

*/
public class Demo01Client {
public static void main(String[] args) throws IOException {
//1. 创建Socket对象,表示客户端。
//创建Socket对象的时候,会主动连接服务器,如果无法连接,那么就会报错(三次握手就是在这完成的)
Socket socket = new Socket(“127.0.0.1”, 9527);
//2. 通过Socket对象调用getOutputStream获取一个输出流,用来发送数据。
OutputStream out = socket.getOutputStream(); //该输出流的目的地是服务器。
//3. 通过输出流向服务器发送(写)数据
out.write(“你好服务器, I’m coming”.getBytes());
//4. 通过Socket对象调用getInputStream获取一个输入流, 用来接收数据。
InputStream in = socket.getInputStream(); //该输入流的数据源来自服务器,这个流用于读取服务器发过来的数据。
//5. 通过输入流接收(读取)服务器发送过来的数据。
byte[] bArr = new byte[1024];
int len = in.read(bArr);
System.out.println(new String(bArr, 0, len));//将读取到的数据转成字符串进行打印
//6. 释放资源。
socket.close();
}
}

/*
TCP的服务器端。

在Java中,有一个类可以表示TCP的服务器端,这个类叫做ServerSocket

ServerSocket的构造方法:
    ServerSocket(int port): 参数要传递一个端口号。 这个端口号表示该服务器程序的端口号。

ServerSocket的其他方法:
    Socket accept(): 监听并获取客户端Socket

TCP服务器端的实现步骤:
    1. 创建ServerSocket表示服务器。
    2. 调用服务器ServerSocket的accept方法,监听并获取客户端请求。
    3. 通过监听获取到的客户端Socket获取输入流,用来读取。
    4. 通过得到的数据读取客户端发送过来的数据。
    5. 通过监听获取到的客户端Socket获取输出流, 用来发送数据。
    6. 通过输出流给客户端发送数据。
    7. 释放资源。

*/
public class Demo02Server {
public static void main(String[] args) throws IOException {
//1. 创建ServerSocket表示服务器。
ServerSocket serverSocket = new ServerSocket(9527);
//2. 调用服务器ServerSocket的accept方法,监听并获取客户端请求。
Socket socket = serverSocket.accept();
//3. 通过监听获取到的客户端Socket获取输入流,用来读取。
InputStream in = socket.getInputStream();//得到的输入流,用来接收客户端发送过来的数据。
//4. 通过得到的数据读取客户端发送过来的数据。
byte[] bArr = new byte[1024];
int len = in.read(bArr);
System.out.println(new String(bArr, 0, len));
//5. 通过监听获取到的客户端Socket获取输出流, 用来发送数据。
OutputStream out = socket.getOutputStream(); //得到的输出流,用来向客户端写数据。
//6. 通过输出流给客户端发送数据。
out.write(“收到了你的消息,谢谢”.getBytes());
//7. 释放资源。
socket.close();
serverSocket.close();
}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值