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();
}
};
}
}
这样当一个客户端连接后又进行循环,等待第二个客户端连接,
,客户端使用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();
}
};
}
}
相关文章推荐
- Java_socket程序学习03-一个客户端对一个服务器-交互(服务器端)--01
- Java_socket程序学习01-一个客户端对一个服务器
- Java_socket程序学习02-一个客户端对一个服务器-客户端键盘输入
- Java_socket程序学习03-一个客户端对一个服务器-交互(客户端)--02
- 一个 Java 的 Socket 服务器和客户端通信的例子
- Java编写一个简单的TCP通信程序。服务器发送一条字符串,客户端接收该信息并显示。
- Java学习笔记(一)------服务器&客户端一对一通信小程序实现(TCP)
- Java 的 Socket 服务器和客户端通信的例子 存在一个小问题
- 一个 Java 的 Socket 服务器和客户端通信的例子
- 运用Java中socket编程实现简单的服务器客户端收发信息程序
- 一个 Java 的 Socket 服务器和客户端通信的例子
- 一个 Java 的 Socket 服务器和客户端通信的例子
- TCP/TP编程 - 一个简单的Linux下C写的socket服务器客户端程序
- 一个 Java 的 Socket 服务器和客户端通信的例子
- 一个 Java 的 Socket 服务器和客户端通信的例子
- 【Java学习笔记】60:客户端PC-后端程序服务器-数据库服务器之间的通信demo
- 【UNP学习笔记】一个简单的服务器/客户端程序
- 一个 Java 的 Socket 服务器和客户端通信的例子
- 一个 Java 的 Socket 服务器和客户端通信的例子
- 一个 Java 的 Socket 服务器和客户端通信的例子