Java_socket程序学习04-一个服务器对多个一个客户端

此服务端与Java_socket程序学习03中的不同时划线部分,这里我们把ss.accept()加入到了循环体,

这样当一个客户端连接后又进行循环,等待第二个客户端连接,

,客户端使用Java_socket程序学习03-02的客户端,但是也发现问题

第一个客户端可以成功连接到服务器

第二个客户端也可以成功的连接到服务器

两个客户端通过键盘输入都能连续的发送数据到客户端

问题是当有一个客户端连接时,客户端和服务器器能相互通信。但是当有多个客户端连接服务器时,

服务器通过键盘的输入有时其中一个客户端能接收到,有时两个客户端都接收不到信息。


package tcp;



import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.ServerSocket;
import java.net.Socket;


public class ServerNc {


/**
* @param args
*/
static int portNo=3337;
public static void main(String[] args) throws Exception{
ServerSocket ss = new ServerSocket(portNo);
System.out.println("The Server is start"+ss);

//当有客户端连接的时候 ,标记客户端为socket01
while(true){
Socket socket = ss.accept();//阻塞中,等待客户端接入
System.out.println("Client is connected"+socket);

   
    //实例化两个线程类
Syin sy = new Syin(socket);
Soin so = new Soin(socket);
   
sy.start();
so.start();
}

    //socket.close();
    //ss.close();
   
    //System.out.print("11111111111111111111111111111111111");
}



//定义两个线程类1.class Syin键盘流处理 2.class Soin socket客户端流
public static class Syin extends Thread {
Socket socket01 ;
public Syin(){
     
}

public Syin(Socket a){
this.socket01=a;
System.out.print("服务器键");
};


public void run() {
try{
BufferedReader ins = new BufferedReader(new InputStreamReader(System.in));
PrintStream outs=new PrintStream(socket01.getOutputStream());
while(true){
String str_sy = ins.readLine();
       if(str_sy.equals("bb"))
        break;
System.out.println("盘的输入内容是:"+str_sy);
outs.println(str_sy);
}
socket01.close();

}catch (Exception e) {
                 e.printStackTrace();
             }

};
}
//
public static class Soin extends Thread {
Socket socket01 ;
public Soin(){
     
}
public Soin(Socket b){
this.socket01=b;
System.out.print("来自客户");
};
public void run(){
try{
BufferedReader ins = new BufferedReader(new InputStreamReader(socket01.getInputStream()));
PrintStream outs=new PrintStream(socket01.getOutputStream());

while(true){
String str_sy = ins.readLine();
       if(str_sy.equals("bb"))
        break;
System.out.println("端的信息:"+str_sy);
}
socket01.close();

}catch (Exception e) 
           {
               e.printStackTrace();
           } 


};
}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值