tcp是一个可靠的协议,面向连接的协议,实现tcp程序,需要编写服务器端和客户端
ServerSocket:此类实现服务器套接字
Socket:此类实现客户端套接字(也可以就叫套接字)
Socket是网络驱动层提供给应用程序编程的接口和一种机制
单服务器和单用户端通信
示例程序:
服务器端代码:
//服务器端:先读再写
public class EchoServerDemo {
public static void main(String[] args) {
//step1:创建一个服务器端的Socket(91024-65535)
try {
ServerSocket server = new ServerSocket(6666);
System.out.println("服务器已启动,正在等待客户端连接");
//step2:等待客户端连接,造成阻塞,如果没有客户端连进来就一直等待
//如果有客户端连接成功,立即返回一个Socket对象
Socket socket = server.accept();
System.out.println("客户端连接成功"+server.getInetAddress().getHostAddress());
BufferedReader br = new BufferedReader(
new InputStreamReader(socket.getInputStream()));
//step3:通过输入流读取网络数据,如果没有数据,会造成阻塞
String info = br.readLine();
System.out.println(info);
//step4:获取输出流,向客户端返回消息
PrintStream ps = new PrintStream(
new BufferedOutputStream(socket.getOutputStream()));
ps.println("echo:"+info);
ps.flush();
//step5:关闭
ps.close();
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
客户端代码:
public class EchoClientDemo {
public static void main(String[] args) {
//step1:创建一个Socket对象
try {
Socket socket = new Socket("localhost",6666);
//step2:获取socket的输入输出流
PrintStream ps = new PrintStream(
new BufferedOutputStream(socket.getOutputStream())
);
BufferedReader br = new BufferedReader(
new InputStreamReader(socket.getInputStream())
);
ps.println("hello");
ps.flush();
//读取服务器端返回的数据
String info = br.readLine();
System.out.println(info);
ps.close();
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
运行效果:
在运行客户端:
此时服务器端:
单服务器和多客户端通信
需要加入多线程的处理机制