您的位置:首页 > 编程语言 > Java开发

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

2015-03-27 09:02 507 查看
此服务端与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();

}

};

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: