JavaTCP协议 客户端和服务端
TCP传输
Socket和ServerSocket
建立客户端和服务器端
建立连接后,通过Socket中的IO流进行数据的传输
关闭socket
同样,客户端与服务端是两个独立的应用程序。
类 Socket
此类实现客户端套接字(也可以就叫“套接字”)。套接字是两台机器间通信的端点。
构造方法
|
Socket() |
|
Socket(InetAddress address, int port) |
|
常用方法
void |
connect(SocketAddress endpoint) |
getInputStream() |
|
getOutputStream() |
|
void |
shutdownInput() |
void |
shutdownOutput() |
客户端发送数据到服务端
TCPClentDemo.java
import java.io.IOException; import java.io.OutputStream; import java.net.InetAddress; import java.net.Socket; public class TCPClentDemo { public static void main(String[] args) throws IOException, IOException { System.out.println("客户端开启。。。。"); /** *TCP传输,客户端建立过程。 *1,创建tcp客户端socket服务,使用的是socket对象 * 建议该对象一创建就明确目的地(明确要连接的主机)。 *2,如果连接建立成功,说明数据传输通道已建立。 * 该通道是socket流,是底层建立好的, * 既然是流,说明这里既有输出,又有输入。 * 想要输入或输出对象,可以找socket来获取 * 可以通过getOutputStream()和getInputStream来获取两个字节流 *3,使用输出流,将数据输出 *4,关闭资源 */ Socket socket = new Socket(InetAddress.getLocalHost().getHostAddress(),5432); OutputStream out = socket.getOutputStream(); out.write("TCP,哥们又来了".getBytes()); socket.close(); } }
类ServerSocket
此类实现服务器套接字。服务器套接字等待请求通过网络传入。它基于该请求执行某些操作,然后可能向请求者返回结果。
构造方法
|
ServerSocket(int port) |
|
ServerSocket() |
常用方法
accept() |
|
void |
close() |
getInputStream() |
|
getOutputStream() |
服务端接受客户端发送过来的数据,并打印在控制台上
TCPServerDemo.java
import java.io.IOException; import java.io.InputStream; import java.net.ServerSocket; import java.net.Socket; public class TCPServerDemo { public static void main(String[] args) throws IOException { /** *TCP传输,客户端建立过程。 *1,创建tcp客户端socket服务,使用的是socket对象 * 建议该对象一创建就明确目的地(明确要连接的主机)。 *2,如果连接建立成功,说明数据传输通道已建立。 * 该通道是socket流,是底层建立好的, * 既然是流,说明这里既有输出,又有输入。 * 想要输入或输出对象,可以找socket来获取 * 可以通过getOutputStream()和getInputStream来获取两个字节流 *3,使用输出流,将数据输出 *4,关闭资源 */ System.out.println("服务端开启。。。。"); // 1,创建服务端对象 ServerSocket ss = new ServerSocket(5432); // 2,获取链接过来的客户端对象 Socket socket = ss.accept(); // 3,通过socket对象获取输入流,要读取客户端发来的数据 InputStream in = socket.getInputStream(); byte buf[] = new byte[1024]; int ch = 0; while ((ch = in.read(buf)) != -1) { System.out.println(new String(buf, 0, ch)); } socket.close(); ss.close();// 一般不需要关闭,可能客户端多次访问 } }