java server端利用socket和多线程技术实现消息转发功能,求帮助!
server、client一对一通信已经实现,代码要怎么改才能实现client→server→client的通信呢
package com.zeph.multiclient;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class MultiThreadServer extends Thread {
private Socket client;
public MultiThreadServer(Socket c) {
this.client = c;//创建与客户端连接的socket
}
public void run() {
try {
System.out.println(Thread.currentThread().getName() + " start");
BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()));
//利用BufferedReader实现数据的快速接收,getInputStream()获取socket底层数据输入流,InputStreamReader()实现字节到字符串的高校读取
BufferedWriter out =new BufferedWriter(new OutputStreamWriter(client.getOutputStream()));
//利用BufferedWriter实现数据的快速写入,getOutputStream()获取socket底层数据输出流,OutputStreamWriter()实现字节到字符串的高校写入
String str = in.readLine();//此方法为阻塞状态,一直到收到回车(\r)换行(\n)才结束阻塞(接收信息完毕)
while (str != null) {
System.out.println("server receive: " + str);//将接收到的信息打印出来
out.write('3');//信息写入输出流
out.flush();//写回client需要flush
System.out.println("send ok");
str = in.readLine();//读取client返回信息,此方法为阻塞状态,一直到收到回车(\r)换行(\n)才结束阻塞(接收信息完毕)
System.out.println("server receive: " + str);
str = null;//清空数据,跳出循环
}
System.out.println(Thread.currentThread().getName() + " end");
out.close();
} catch (IOException e) {
}
}
public static void main(String[] args) throws IOException {
ServerSocket server = new ServerSocket(1234);
System.out.println("server is start!");
while (true) {
MultiThreadServer mc = new MultiThreadServer(server.accept());
if(server.getInetAddress().getHostAddress().indexOf("0.0.0.0")<0){
System.out.println("accept connect: " + server.getInetAddress().getHostAddress());
}
mc.start();
}
}
}
...全文
相关推荐
基于JavaFx的Socket多线程通讯程序实例(含:Server端和Client端)
基于JavaFx的Socket多线程通讯程序实例(含:Server端和Client端),初学者必备。
如何在Java实现TCP方式发送和接收Socket消息(多线程模式)
详细叙述了如何在Java实现TCP方式发送和接收Socket消息(多线程模式)。欢迎点赞收藏。
java基于socket/server的多线程聊天室程序,可以公聊和私聊。
基于server/socket编写的,能实现多人群聊和单人私聊。
Java Socket实现多线程通信功能示例
主要介绍了Java Socket实现多线程通信功能,结合具体实例形式较为详细的分析了java多线程通信的原理及客户端、服务器端相应实现技巧,需要的朋友可以参考下
简单qq聊天(Java socket实现)
可以实现简单的类似qq聊天的项目,所有的消息都是通过服务器的转发来实现的,可以实现群聊,私聊,状态的改变(包括在线、隐身、离线)


Java SE
