socket 直接的通信tcp

TCP 连接的建立步骤

客户端向服务器端发送连接请求后,就被动地等待服务器的响应。典型的 TCP 客户端要经过下面三步操作:

  • 创建一个 Socket 实例:构造函数向指定的远程主机和端口建立一个 TCP 连接;
  • 通过套接字的 I/O 流与服务端通信;
  • 使用 Socket 类的 close 方法关闭连接。

服务端的工作是建立一个通信终端,并被动地等待客户端的连接。

典型的 TCP 服务端执行如下两步操作:

  1. 创建一个 ServerSocket 实例并指定本地端口,用来监听客户端在该端口发送的 TCP 连接请求;

  2. 重复执行:

    • 调用 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();
}
}
  
  
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值