问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

socket java实现客户端多线程接受消息并发送消息给服务器,并发执行

发布网友 发布时间:2022-04-27 09:33

我来回答

3个回答

热心网友 时间:2023-09-20 08:12

客服端:
package MyKeFudaun;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.Socket;
import java.net.UnknownHostException;

public class KeFuDuan {
public static void main(String[] args) {
KeFuDuan kf = new KeFuDuan();
kf.start();
}
public void start(){
Socket sco;
String ss= "";
try {
sco = new Socket("127.0.0.1",8866);
KeFuanJie kf = new KeFuanJie(sco);
KeFuWuFasong kfs = new KeFuWuFasong(sco);
kf.start();
kfs.start();

//sco.close();
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

class KeFuanJie extends Thread{

Socket soc;
String ss;
BufferedReader br;
public KeFuanJie(Socket soc){
try {
this.soc = soc;
br = new BufferedReader(new InputStreamReader(soc.getInputStream()));

} catch (IOException e) {
e.printStackTrace();
}

}

//负责接受服务端来的信息
public void run(){
while(true){
//接受服务器端来的信息
try {
ss = br.readLine();
System.out.println("服务器---->客服端: "+ss);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

}
}

//向服务器发送东西
class KeFuWuFasong extends Thread{

Socket soc;
BufferedWriter bw;
BufferedReader brr;
public KeFuWuFasong(Socket soc){

this.soc = soc;

try {
brr =new BufferedReader(new InputStreamReader(System.in));
bw = new BufferedWriter(new OutputStreamWriter(soc.getOutputStream()));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

public void run(){
while(true){
//向服务器发送请求
try {
bw.write(brr.readLine());
bw.newLine();
bw.flush();// 或者用bw.close()
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}

服务器端:
package MyKeFudaun;

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 Server {

public static void main(String[] args) {
Server server = new Server();
server.start();
}

public void start(){

try { //服务器端打开端口
ServerSocket server = new ServerSocket(4499);
Socket socket = null;
ServerToClientThread stct = null;

while(true){
socket = server.accept(); //迎接(接收)客户端的Socket访问
stct = new ServerToClientThread(socket); //分配一个新线程负责和信赖的Socket沟通
stct.start();
}

} catch (IOException e) {
e.printStackTrace();
}

}

}

package MyKeFudaun;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Socket;

public class ServerReceiveFromClient extends Thread{

Socket socket;
BufferedReader br;
String s;

public ServerReceiveFromClient(Socket socket){
this.socket = socket;
try {
br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
} catch (IOException e) {
e.printStackTrace();
}
}

public void run(){

while(true){
try {
s = br.readLine();
System.out.println(socket.getInetAddress().getHostAddress()+"发送了:"+s);

} catch (Exception e) {
e.printStackTrace();
}

}
}
}

package MyKeFudaun;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.Socket;

public class ServerToClientThread extends Thread{

Socket socket;
BufferedReader br;
BufferedWriter bw;
String s;

//建立的同时,和客户端的Socket建立输入、输出流
public ServerToClientThread(Socket socket){
this.socket = socket;
try {
bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
} catch (IOException e) {
e.printStackTrace();
}

}

public void run(){
ServerReceiveFromClient srfc = new ServerReceiveFromClient(socket);
srfc.start();

while(true){
try {
bw.write("欢迎光临。");
bw.newLine();
bw.flush();
Thread.sleep(10*1000);
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}

热心网友 时间:2023-09-20 08:13

对于通信来说,不存在绝对的服务器和客户端,谁在等待别人来,谁就是服务器,谁主动去联系人,谁就是客户端。
所以。
你要想客户端接受消息,那在启动客户端的时候,在客户端程序里开始一个提供端口的Socket就可以了。
ServerSocket serverSocket = new ServerSocket(5000);
while (true) {
final Socket socket = serverSocket.accept();
new Thread() {
Socket mySocket = socket;

@Override
public void run() {
try {
System.out.println(mySocket);
InputStream is = mySocket.getInputStream();
byte[] bytes = new byte[1024];
int n = is.read(bytes);
System.out.println(new String(bytes, 0, n));
OutputStream os = mySocket.getOutputStream();
os.write(("server reply at time " + new Date()
.toString()).getBytes());
mySocket.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}.start();
}

热心网友 时间:2023-09-20 08:13

自己写的socket通信在遇到大的并发量时经常会出现各种各样的问题,对于你的这种需求,建议你使用apache下面的mina框架来写,很简单的,就是专门的网络通讯框架,里面的socket
封装的比较完善,没啥大问题!
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
父母离异的话,会不会导致孩子心智不成熟? 过节 公司给我们发的购物卡 这个怎么做分录 属于福利费吗 需要计提吗... 乡村振兴公务员和省考公务员有什么区别 ...小时候跟着爷爷学国画书法,小受家是农村的,小受姓夏或叶,他带着他... 瑞麒X1安全装置 瑞麒X1的舒适型和豪华型有什么区别?配置有哪些不同的地方?这5000块多在... 瑞麒X1的安全性能方面配置如何? 脚崴了 有大量於血 怎么样才能快速消肿 脚崴了外侧出现瘀血浮肿怎么消除? ...换了我喜欢的发型,但是穿了件有点透明的衣服,可以看到肩_百度... 公众号里的视频从网页打开后无法复制!求大神指点! 国际上许多企业采用并购式进行国际直接投资,其原因有哪些 什么是“FDI形式”? 国际直接投资的概述 特低渗透油藏开发方案优化研究——以大古、樊块为例 迪迦奥特曼是啥时候拍的 支付宝实名认证之后就可以收款了吗 大古死了吗? 支付宝已经实名认证了可以用钱都是未成年用钱有限制吗? 支付宝实名认证后,还可以用其他人名申请的银行卡付款吗? 支付宝实名认证后还可以用朋友银行卡快捷付款吗? 支付宝实名之后就可以用了是吗?没有银行卡 我的支付宝被别人实名认证了,我还能付款吗 支付宝实名认证了就可以到处用了吗 支付宝实名认证了,没有绑定银行卡!可以转账吗 支付宝没有绑定银行卡 但用身份证实名认证了 可以收付款吗 支付宝实名认证未绑定银行卡可以收付款吗? 中信证券老三板怎么开通 QQ聊天页面怎么总是在最前面 怎么设置QQ启动后窗口在桌面的位置? 消息队列(超大数据量)用JAVA线程在处理SQL数据时对CPU资源持续占用大资源这个问题如何优化? java多线程 读取队列数据,减少耦合性怎么做 java线程组,线程池,线程队列分别是什么?有什么区别? java无法从持久队列获取消息,求教 小学三年级语文上册阶梯阅读片段七的第五题:大批的鸟从南方飞来。这里 大批的鸟 阶梯阅读三年级,36片段.4‘短文按()的结构来写的,第二自然段按()的顺序来写小草的. 急,. 小学生阅读阶梯训练三年级第28篇文章智斗狼群答案是什么 三年级语文阶梯门门阅读答案爱虚荣的猫 铁塔淡奶油可以做什么 阶梯阅读三年级第五八课的答案开始的反义词 三年级阶梯阅读答案 铁塔芝士问题 小学3年级语文阅读阶梯训练答案 窃窃私语的窃的意思是偷偷的吗?还是什么的? 小学三年级阶梯阅读p91页 72课《海底世界》 第四题 奶油什么牌子好 小学三年级阶梯阅读片段十第三小题徐是什么意思 小学三年级语文阶梯阅读95垂柳的过渡段是什么答案也可以 需要小学语文新课标阶梯阅读训练三年级升级版 答案! 安佳奶油奶酪和铁塔奶油奶酪比,哪个比较好啊 云南出版集三年级新课标小学语文阶梯阅读训练晨光出版社作者是谁_百度问一问