JAVA serverSocket连接多个客户端 30

JAVAserverSocket连接多个客户端,并且能让客户端之间相互通信,类似于聊天室一样代码如下:==================================... JAVA serverSocket连接多个客户端,并且能让客户端之间相互通信,类似于聊天室一样
代码如下:
=================================================================
客户端内容:
import java.net.*;
import java.io.*;
public class Tcpclient extends Thread
{
private static Socket skt; //定义客户端套接字
public void run()
{
try{
BufferedReader br_KEY_in = new BufferedReader(new InputStreamReader(System.in));
PrintWriter pw = new PrintWriter(skt.getOutputStream());
while(true){
pw.println(br_KEY_in.readLine()); //读取一个文本行
pw.flush(); // 刷新该流的缓冲
}
}
catch(Exception e){
e.printStackTrace();
}
}
public static void main(String[] args) throws Exception
{
skt = new Socket("127.0.0.1", 7777); // 呼叫服务器
System.out.println("client 连接成功!");
new Tcpclient().start(); //启动线程
BufferedReader br_in = new BufferedReader(new InputStreamReader(skt.getInputStream()));
while(true){ //从输入流不断的读数据,直到读完为止
System.out.println(br_in.readLine());
}
}
}

==================================================================
服务端内容:
import java.net.*;
import java.io.*;
public class Tcpserver extends Thread
{
private static Socket skt;

public void run()
{
try{
//输入数据的读取
BufferedReader br__KEY_in = new BufferedReader(new InputStreamReader(System.in));
PrintWriter pw = new PrintWriter(skt.getOutputStream());// 写入数据
while(true){
pw.println(br__KEY_in.readLine()); //读取一个文本行
pw.flush(); / 刷新该流的缓冲
}
}
catch(Exception e){
e.printStackTrace();
}
}
public static void main(String[] args) throws Exception
{
ServerSocket server = new ServerSocket(7777); // 定义服务器端套接字
skt = server.accept(); // 使server进入等待呼叫的状态(侦听)注意是阻塞式..
System.out.println("server 连接成功!"); //解除阻塞,完成Socket连接
new Tcpserver().start(); //启动线程
BufferedReader br _in= new BufferedReader(new InputStreamReader(skt.getInputStream()));
while(true){ //从输入流不断的读数据,直到读完为止
System.out.println(br_in.readLine());
}
}
}
===========
在线等........能帮我解决这个问题的,追加100分
展开
 我来答
mzocean
2012-09-10 · TA获得超过1083个赞
知道小有建树答主
回答量:492
采纳率:33%
帮助的人:474万
展开全部
用一个Socket只能是一个客户端与服务器连接,如果要多个客户端,需要多个Socket,每次有客户端加入,都新建一个Socket,并且与之对应新建一个线程。
建议使用HashMap实现。
更多追问追答
追问
谢谢啊,刚学这个,还不知道具体怎么操作,在哪行加代码,并且加什么代码呢?
HashMap类还从没用过,刚看了下帮助文档。用HashMap又怎么写呢?
追答
给你说一下具体想法吧,可以在服务器类中使用HashMap存储连接到服务器的客户端Socket,每连接一个,就在HashMap中加入一个,不过注意区分每个客户端。如果一个客户端发消息过来,就使用HashMap中的Socket把它转发给其他的客户端。不过注意每个客户端都需要一个线程,也就是说还需要一个HashMap来存储线程。
客户端用你这个应该稍微改改就行了,可以加个标识什么的,服务器类上改的话就很大了,
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
outermange
2012-09-13
知道答主
回答量:10
采纳率:0%
帮助的人:4.2万
展开全部
对客户端之间的交互还是需要用线程来实现的。不然的话一个socket server只能接受一个客户端的链接
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
青花瓷102
2012-09-12
知道答主
回答量:5
采纳率:0%
帮助的人:6065
展开全部
这个还真没具体的测试过,呵呵,,
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式