先看代码
《MultiJabberServer》import java.io.*;
import java.net.*;public class MultiJabberServer
{ static final int PORT = 8080; public static void main(String[] args)
throws IOException
{
ServerSocket s = new ServerSocket(PORT);
System.out.println("==服务端开始==");
try
{
while (true)
{
Socket socket = s.accept();
try
{
new ServeOneJabber(socket);
}
catch (IOException e)
{
socket.close();
}
}
}
finally
{
s.close();
}
}
}
《ServeOneJabber》
import java.io.*;
import java.net.*;public class ServeOneJabber extends Thread
{ private Socket socket;
private BufferedReader in;
private PrintWriter out; public ServeOneJabber(Socket s)
throws IOException
{
socket = s;
in =
new BufferedReader(
new InputStreamReader(
socket.getInputStream()));
out =
new PrintWriter(
new BufferedWriter(
new OutputStreamWriter(
socket.getOutputStream())), true);
start();
} @Override
public void run()
{
try
{
while (true)
{
String str = in.readLine();
if (str.equals("END"))
{
break;
}
System.out.println("==输出==" + str);
out.println(str);
}
System.out.println("==客户端退出了==");
}
catch (IOException e)
{
}
finally
{
try
{
socket.close();
}
catch (IOException e)
{
System.out.println("==客户端意外掉线了==");
}
}
}
}本人学生
有个问题是:
现在假设有两个客户端连接进来了 分别是A和B
现在A传了个值给服务器
我怎么做才能把这个值传给B?
小弟不懂 new ServeOneJabber(socket)后
直接交给线程start()了
我怎么区分A和B?
《MultiJabberServer》import java.io.*;
import java.net.*;public class MultiJabberServer
{ static final int PORT = 8080; public static void main(String[] args)
throws IOException
{
ServerSocket s = new ServerSocket(PORT);
System.out.println("==服务端开始==");
try
{
while (true)
{
Socket socket = s.accept();
try
{
new ServeOneJabber(socket);
}
catch (IOException e)
{
socket.close();
}
}
}
finally
{
s.close();
}
}
}
《ServeOneJabber》
import java.io.*;
import java.net.*;public class ServeOneJabber extends Thread
{ private Socket socket;
private BufferedReader in;
private PrintWriter out; public ServeOneJabber(Socket s)
throws IOException
{
socket = s;
in =
new BufferedReader(
new InputStreamReader(
socket.getInputStream()));
out =
new PrintWriter(
new BufferedWriter(
new OutputStreamWriter(
socket.getOutputStream())), true);
start();
} @Override
public void run()
{
try
{
while (true)
{
String str = in.readLine();
if (str.equals("END"))
{
break;
}
System.out.println("==输出==" + str);
out.println(str);
}
System.out.println("==客户端退出了==");
}
catch (IOException e)
{
}
finally
{
try
{
socket.close();
}
catch (IOException e)
{
System.out.println("==客户端意外掉线了==");
}
}
}
}本人学生
有个问题是:
现在假设有两个客户端连接进来了 分别是A和B
现在A传了个值给服务器
我怎么做才能把这个值传给B?
小弟不懂 new ServeOneJabber(socket)后
直接交给线程start()了
我怎么区分A和B?
楼主【zjkboy】截止到2008-07-25 20:46:53的历史汇总数据(不包括此帖):
发帖的总数量:12 发帖的总分数:180 每贴平均分数:15
回帖的总数量:7 得分贴总数量:0 回帖的得分率:0%
结贴的总数量:10 结贴的总分数:140
无满意结贴数:3 无满意结贴分:50
未结的帖子数:2 未结的总分数:40
结贴的百分比:83.33 % 结分的百分比:77.78 %
无满意结贴率:30.00 % 无满意结分率:35.71 %
楼主加油
A ,B 。放A和B客户端的发送数据,收到客户端的命令为getA时表示B客户端要取A发送的数据,就从A队列取数据发给B客户端。
也可以在收到A的发送命令后就直接发给B。不放在队列中。
A ,B 。放A和B客户端的发送数据,收到客户端的命令为getA时表示B客户端要取A发送的数据,就从A队列取数据发给B客户端。
也可以在收到A的发送命令后就直接发给B。不放在队列中。
while(true) {
Socket sc = ss.accept();
System.out.println("IP :"+sc.getInetAddress()+"Connet success!");
new ConnThread(sc).start();
//ConnThread类
class ConnThread(Scoket sc) {
new Reader (this,sc.getInputStream()).start();
wri = new Writer(sc.getOutputStream()).start();
}//Reader类
public void run () {
try {
while((count = is.read(buffer)) != -1) {
System.out.println("服务器接收到"+new String(buffer,0,count));
deal(str);//处理分解后的消息
}
} catch (IOException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
}
}
List<myThread> list = new LinkedList<myThread>()
while (true)
{
Socket socket = s.accept();
myThread mt = new myThread(socket)
list.add(mt);
list.get(list.size-1).start();
} class myThread extend Thread{ Socket sk public myThread(Socket sk){
this.sk = sk;
}
public void run()
{
....
//自己处理
}
}没测试过的...