使用TCP进行通信需要客户端先与服务端进行连接才可以通信。 TCP编程面向的是IO流,它使用IO流进行通信。
服务端基本流程:
(1)使用ServerSocket指定端口创建服务器。
(2)使用Socket监听是否有客户端连接,ServerSocket的accept()方法是阻塞式的。
(3)使用IO流接收数据。
(4)使用IO流发送数据,并刷新输出流。
(5)关闭IO流,先打开的后关闭。
客户端基本流程:
(1)使用Socket创建客户端并指定服务端的地址和接口。
(2)使用IO流发送数据,并刷新输出流。
(3)使用IO流接收数据。
(4)关闭IO流,先打开的后关闭。
package Net.TCP;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
/**
* TCP编程练习:熟悉流程,实现收发消息
*
* @author zhaoy
*
*/
public class Test01_server {
public static void main(String[] args) throws IOException {
System.out.println("======服务端=======");
// 指定端口 创建服务端
ServerSocket server = new ServerSocket(9999);
// 阻塞式的等待连接
Socket client = server.accept();
System.out.println("客户端建立连接");
// 接收消息
DataInputStream dis = new DataInputStream(client.getInputStream());
String msg = dis.readUTF();
// 返回消息
DataOutputStream dos = new DataOutputStream(client.getOutputStream());
dos.writeUTF(msg);
// 刷新输出流
dos.flush();
// 关闭流
dos.close();
dis.close();
}
}
package Net.TCP;
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.InputStreamReader;
import java.net.Socket;
/**
* TCP编程练习:熟悉流程,实现收发消息
*
* @author zhaoy
*
*/
public class Test01_client {
public static void main(String[] args) throws Exception {
System.out.println("=======客户端========");
// 建立连接,创建客户端指定服务的地址和端口
Socket client = new Socket("localhost", 9999);
// 发送数据
BufferedReader console = new BufferedReader(new InputStreamReader(System.in));
String msg = console.readLine();
DataOutputStream dos = new DataOutputStream(client.getOutputStream());
dos.writeUTF(msg);
// 刷新输出流
dos.flush();
// 接收消息
DataInputStream dis = new DataInputStream(client.getInputStream());
msg = dis.readUTF();
System.out.println(msg);
// 关闭流
dis.close();
dos.close();
}
}