java server端利用socket和多线程技术实现消息转发功能,求帮助!

向云 向云 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
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();
}
}
}
...全文

相关推荐

评论 13
收藏 已收藏
分享
返回顶部
向云
Java SE 62,620 成员 307,251 内容