tcp协议理解
需要建立客户端(Socket)和服务器端(ServerSockt)。建立连接后,通过socket中io流进行数据传输。
package com.neutron.network.tcp.demo;
import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;
/**
* tcp协议的客户端
* @author zhanght
*
*/
public class Client {
/**
* tcp分为客户端和服务器端[udp分为发送端和接收端]
* tcp客户端对应的对象是Socket,服务器端对应对象是ServerSocket对象
* [udp发送端和劫手段都是DatagramSocket对象]
*
* 通过查询客户端Socket对象,该对象建立的时候就可以连接特定主机[udp发送端需要在send时候指定接收端]
* 因为tcp是面向连接的,在建立socket服务时,就要有客户端存在,并且连接成功。只有在形成通路后,才能在该通道进行数据传输。
*
* 使用步骤:
* 1.创建Socket服务,指定主机名称和端口
* 2.获取输出流,然后从输出流中发送数据到服务器端
* 3.获取数据流,然后从输入流中获取服务器端发送回来的数据
*/
public static void main(String[] args) throws UnknownHostException, IOException {
// 创建Socket服务,指定主机名称和端口
@SuppressWarnings("resource")
Socket client = new Socket("127.0.0.1", 10003);
// 发送数据,获取输出流
OutputStream out = client.getOutputStream();
// 准备发送的数据
byte[] datas = "tcp client hello world!".getBytes();
// 发送数据
out.write(datas);
//为何不关闭客户端,因为在服务器端将客户端关闭
}
}
package com.neutron.network.tcp.demo;
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
/**
* tcp服务器端
* @author zhanght
*
*/
public class Server {
/**
* 1.建立服务端的服务,ServerSocket,服务端服务绑定端口
* 2.获取连接过来的客户端对象
* 3.使用客户端对象获取读取流来读取数据
* 4.关闭客户端(看情况)
* 5.tcp协议中必须首先启动服务器端服务
*/
public static void main(String[] args) throws IOException {
// 建立服务端的服务,ServerSocket,服务端服务绑定端口
@SuppressWarnings("resource")
ServerSocket server = new ServerSocket(10003);
// 获取连接过来的客户端,使用ServerSocket的accept方法,没有连接就会等待,阻塞式方法
Socket client = server.accept();
// 获取客户端对象的读取流
InputStream in = client.getInputStream();
// 存取数据的变量
byte[] datas = new byte[1024];
// 存读取的数据,并获取数据长度
int len = in.read(datas);
// 构建获取的数据
String message = new String(datas, 0, len);
System.out.println("client message:" + message);
System.out.println("client hostname:" + client.getInetAddress().getHostAddress());
System.out.println("client port:" + client.getPort());
//关闭客户端
client.close();
}
}
注意事项:必须首先开启服务器端服务,然后开启客户端服务