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

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

客服端:

package MyKeFudaun;

import javaioBufferedReader;

import javaioBufferedWriter;

import javaioIOException;

import javaioInputStreamReader;

import javaioOutputStreamWriter;

import javanetSocket;

import javanetUnknownHostException;

public class KeFuDuan {

public static void main(String[] args) {

KeFuDuan kf = new KeFuDuan();

kfstart();

}

public void start(){

Socket sco;

String ss= "";

try {

sco = new Socket("127001",8866);

KeFuduanJie kf = new KeFuduanJie(sco);

KeFuWuFasong kfs = new KeFuWuFasong(sco);

kfstart();

kfsstart();

//scoclose();

} catch (UnknownHostException e) {

// TODO Auto-generated catch block

eprintStackTrace();

} catch (IOException e) {

// TODO Auto-generated catch block

eprintStackTrace();

}

}

}

class KeFuduanJie extends Thread{

Socket soc;

String ss;

BufferedReader br;

public KeFuduanJie(Socket soc){

try {

thissoc = soc;

br = new BufferedReader(new InputStreamReader(socgetInputStream()));

} catch (IOException e) {

eprintStackTrace();

}

}

//负责接受服务端来的信息

public void run(){

while(true){

//接受服务器端来的信息

try {

ss = brreadLine();

Systemoutprintln("服务器---->客服端: "+ss);

} catch (IOException e) {

// TODO Auto-generated catch block

eprintStackTrace();

}

}

}

}

//向服务器发送东西

class KeFuWuFasong extends Thread{

Socket soc;

BufferedWriter bw;

BufferedReader brr;

public KeFuWuFasong(Socket soc){

thissoc = soc;

try {

brr =new BufferedReader(new InputStreamReader(Systemin));

bw = new BufferedWriter(new OutputStreamWriter(socgetOutputStream()));

} catch (IOException e) {

// TODO Auto-generated catch block

eprintStackTrace();

}

}

public void run(){

while(true){

//向服务器发送请求

try {

bwwrite(brrreadLine());

bwnewLine();

bwflush();// 或者用bwclose()

} catch (IOException e) {

// TODO Auto-generated catch block

eprintStackTrace();

}

}

}

}

服务器端:

package MyKeFudaun;

import javaioBufferedReader;

import javaioBufferedWriter;

import javaioIOException;

import javaioInputStreamReader;

import javaioOutputStreamWriter;

import javanetServerSocket;

import javanetSocket;

public class Server {

public static void main(String[] args) {

Server server = new Server();

serverstart();

}

public void start(){

try { //服务器端打开端口

ServerSocket server = new ServerSocket(4499);

Socket socket = null;

ServerToClientThread stct = null;

while(true){

socket = serveraccept(); //迎接(接收)客户端的Socket访问

stct = new ServerToClientThread(socket); //分配一个新线程负责和信赖的Socket沟通

stctstart();

}

} catch (IOException e) {

eprintStackTrace();

}

}

}

package MyKeFudaun;

import javaioBufferedReader;

import javaioIOException;

import javaioInputStreamReader;

import javanetSocket;

public class ServerReceiveFromClient extends Thread{

Socket socket;

BufferedReader br;

String s;

public ServerReceiveFromClient(Socket socket){

thissocket = socket;

try {

br = new BufferedReader(new InputStreamReader(socketgetInputStream()));

} catch (IOException e) {

eprintStackTrace();

}

}

public void run(){

while(true){

try {

s = brreadLine();

Systemoutprintln(socketgetInetAddress()getHostAddress()+"发送了:"+s);

} catch (Exception e) {

eprintStackTrace();

}

}

}

}

package MyKeFudaun;

import javaioBufferedReader;

import javaioBufferedWriter;

import javaioIOException;

import javaioInputStreamReader;

import javaioOutputStreamWriter;

import javanetSocket;

public class ServerToClientThread extends Thread{

Socket socket;

BufferedReader br;

BufferedWriter bw;

String s;

//建立的同时,和客户端的Socket建立输入、输出流

public ServerToClientThread(Socket socket){

thissocket = socket;

try {

bw = new BufferedWriter(new OutputStreamWriter(socketgetOutputStream()));

} catch (IOException e) {

eprintStackTrace();

}

}

public void run(){

ServerReceiveFromClient srfc = new ServerReceiveFromClient(socket);

srfcstart();

while(true){

try {

bwwrite("欢迎光临。");

bwnewLine();

bwflush();

Threadsleep(101000);

} catch (IOException e) {

eprintStackTrace();

} catch (InterruptedException e) {

eprintStackTrace();

}

}

}

}

20000的并发量需要150台服务器。

150台。Tomcat 默认配置的最大请求数是 150,也就是说同时支持 150 个并发,当然了,也可以将其改大。

如果是较大规模或者是,视频内容较多的网站,则会对服务器资源占用较高,推荐用双至强八核处理器,32G内存,1T硬盘的配置来放数据库,然后再用几台普通四核配置的机器放网站前端来做负载均衡即可,带宽需要根据你们的具体需求来决定。

易使用性:

服务器的功能相对于PC机来说复杂许多,不仅指其硬件配置,更多的是指其软件系统配置。服务器要实现如此多的功能,没有全面的软件支持是无法想象的。但是软件系统一多,又可能造成服务器的使用性能下降,管理人员无法有效操纵。

所以许多服务器厂商在进行服务器的设计时,除了在服务器的可用性、稳定性等方面要充分考虑外,还必须在服务器的易使用性方面下足功夫。

服务器的易使用性主要体现在服务器是不是容易操作,用户导航系统是不是完善,机箱设计是不是人性化,有没有关键恢复功能,是否有操作系统备份,以及有没有足够的培训支持等方面。

Windows的网络编程我不熟悉,我只了解Linux网络编程,不过我想原理应该是互通的。

在Linux中大致思路是,由主进程完成Listen监听操作之后,就开始预先派生子进程fork操作,然后在子进程的无限循环中accpet等待客户端来连接。

int main()

{

socket();

bind();

listen();

pids[i]=your_fork_function();

for(;;)

pause();

return 0;

}

-------------------------------------------------------------------------------------------------------------

具体你可以参见《Unix网络编程第一卷》第三十章,P712的内容。

DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
网站模板库 » socket java实现客户端多线程接受消息并发送消息给服务器,并发执行

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情