TCP 连接的建立步骤
客户端向服务器端发送连接请求后,就被动地等待服务器的响应。典型的 TCP 客户端要经过下面三步操作:
- 创建一个 Socket 实例:构造函数向指定的远程主机和端口建立一个 TCP 连接;
- 通过套接字的 I/O 流与服务端通信;
- 使用 Socket 类的 close 方法关闭连接。
服务端的工作是建立一个通信终端,并被动地等待客户端的连接。
典型的 TCP 服务端执行如下两步操作:
-
创建一个 ServerSocket 实例并指定本地端口,用来监听客户端在该端口发送的 TCP 连接请求;
-
重复执行:
-
调用 ServerSocket 的 accept()方法以获取客户端连接,并通过其返回值创建一个 Socket 实例;
- 为返回的 Socket 实例开启新的线程,并使用返回的 Socket 实例的 I/O 流与客户端通信; 通信完成后,使用 Socket 类的 close()方法关闭该客户端的套接字连接。
-
客户端:demo 代码
public class clientInterface {
public static void main(String[]args) throws Exception{
Socket client=new Socket("127.0.0.1",20001);
client.setSoTimeout(10000);
PrintStream p=new PrintStream(client.getOutputStream());
BufferedReader bf=new BufferedReader(new InputStreamReader(client.getInputStream()));
// 键盘输入流
BufferedReader input=new BufferedReader(new InputStreamReader(System.in));
boolean flag=true;
while(flag){
System.out.println("键盘输入");
String str=input.readLine();
p.println(str);
if("bye".equals(str)){
flag=false;
}else{
String echo=bf.readLine();
System.out.println("read serve"+echo);
}
}
input.close();
if(client!=null){
client.close();
}
}
}
-----------------------------------------------------------------------------------------------
服务端:
public class serverInterface implements Runnable{
private Socket client=null;
public serverInterface(Socket client){
this.client=client;
}
@Override
public void run() {
try {
PrintStream out=new PrintStream(client.getOutputStream());
BufferedReader bf=new BufferedReader(new InputStreamReader(client.getInputStream()));
boolean flag=true;
while(flag){
String str=bf.readLine();
if(str==null||"".equals(str)){
flag=false;
}else{
if("bye".equals(str)){
flag=false;
}else{
out.println("echo"+str);
}
}
}
out.close();
client.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
--------------------------------------------------------------------------------------
启动端 boots
public class SocketBoots {
public static void main(String[]args){
try {
ServerSocket ss=new ServerSocket(20001);
Socket client=null;
boolean f=true;
while(f){
client=ss.accept();
System.out.println("begin commi------");
new Thread(new serverInterface(client)).start();
}
ss.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}