Java 多客户端通信服务端代码介绍

开发 后端
Java 多客户端通信需要我们不断的学习,在学习的过程中不断的问题会让我们十分头痛,下面我们就看看相关问题的解决方案。

Java 多客户端通信在很多人看来是一项很繁琐的工作,其实我们在编写代码的时候只要是注意留心Java 多客户端通信的源代码就能发现,我们认为枯燥的东西其实都很简单。

来看服务端的代码:

import java.net.*;   
import java.io.*;   
import java.util.*;   
public class Jserver3 {   
private ServerSocket server;   
List sManager = new ArrayList();   
public Jserver3(){}   
void startServer() //运行服务器   
{   
try   
{   
server=new ServerSocket(719);   
System.out.println("服务器套接字已创建成功!");   
while(true)   
{   
Socket socket=server.accept();   
System.out.println("已经与客户端连接");   
new J_Thread(socket).start();   
sManager.add(socket);   
System.out.println("当前客户端连结数:"+sManager.size());   
}   
}catch(Exception e){}finally   
{   
try   
{   
server.close();   
}catch(Exception e){}   
}   
}   
public static void main(String[] args) {   
Jserver3 server=new Jserver3();   
server.startServer();   
}   
class J_Thread extends Thread  //与客户端进行通信的线程类   
{   
Socket socket;   //套接字引用变量   
private DataInputStream reader;   //套接字输入流   
private DataOutputStream writer;  //套接字输出流   
J_Thread(Socket socket)   //构造函数   
{   
this.socket=socket;   
}   
public void run()   
{   
try   
{   
reader=new DataInputStream(socket.getInputStream());//获取套接字的输入流   
writer=new DataOutputStream(socket.getOutputStream());//获取套接字的输出流   
String msg;   
while((msg=reader.readUTF())!=null)//如果收到客户端发来的数据   
{   
//向客户端发送信息   
writer.writeUTF("您的情书已经收到");   
writer.flush();   
System.out.println("来自客户端:"+msg);   
}   
}catch(Exception e){}finally   
{   
try   
{   
sManager.remove(socket);  //删除套接字   
//关闭输入输出流及套接字   
if(reader!=null)reader.close();   
if(writer!=null)writer.close();   
if(socket!=null)socket.close();   
reader=null;   
writer=null;   
socket=null;   
System.out.println("客户端离开");//向屏幕输出相关信息   
System.out.println("当前客户端的连接数:"+sManager.size());   
}catch(Exception e){}   
}   
}   
}   
}   
import java.net.*;  
import java.io.*;  
import java.util.*;  
public class Jserver3 {  
private ServerSocket server;  
List sManager = new ArrayList();  
public Jserver3(){}  
void startServer() //运行服务器  
{  
try  
{  
server=new ServerSocket(719);  
System.out.println("服务器套接字已创建成功!");  
while(true)  
{  
Socket socket=server.accept();  
System.out.println("已经与客户端连接");  
new J_Thread(socket).start();  
sManager.add(socket);  
System.out.println("当前客户端连结数:"+sManager.size());  
}  
}catch(Exception e){}finally  
{  
try  
{  
server.close();  
}catch(Exception e){}  
}  
}  
public static void main(String[] args) {  
Jserver3 server=new Jserver3();  
server.startServer();  
}  
class J_Thread extends Thread  //与客户端进行通信的线程类  
{  
Socket socket;   //套接字引用变量  
private DataInputStream reader;   //套接字输入流  
private DataOutputStream writer;  //套接字输出流  
J_Thread(Socket socket)   //构造函数  
{  
this.socket=socket;  
}  
public void run()  
{  
try  
{  
reader=new DataInputStream(socket.getInputStream());//获取套接字的输入流  
writer=new DataOutputStream(socket.getOutputStream());//获取套接字的输出流  
String msg;  
while((msg=reader.readUTF())!=null)//如果收到客户端发来的数据  
{  
//向客户端发送信息  
writer.writeUTF("您的情书已经收到");  
writer.flush();  
System.out.println("来自客户端:"+msg);  
}  
}catch(Exception e){}finally  
{  
try  
{  
sManager.remove(socket);  //删除套接字  
//关闭输入输出流及套接字  
if(reader!=null)reader.close();  
if(writer!=null)writer.close();  
if(socket!=null)socket.close();  
reader=null;  
writer=null;  
socket=null;  
System.out.println("客户端离开");//向屏幕输出相关信息  
System.out.println("当前客户端的连接数:"+sManager.size());  
}catch(Exception e){}  
}  
}  
}  

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.
  • 61.
  • 62.
  • 63.
  • 64.
  • 65.
  • 66.
  • 67.
  • 68.
  • 69.
  • 70.
  • 71.
  • 72.
  • 73.
  • 74.
  • 75.
  • 76.
  • 77.
  • 78.
  • 79.
  • 80.
  • 81.
  • 82.
  • 83.
  • 84.
  • 85.
  • 86.
  • 87.
  • 88.
  • 89.
  • 90.
  • 91.
  • 92.
  • 93.
  • 94.
  • 95.
  • 96.
  • 97.
  • 98.
  • 99.
  • 100.
  • 101.
  • 102.
  • 103.
  • 104.
  • 105.
  • 106.
  • 107.
  • 108.
  • 109.
  • 110.
  • 111.
  • 112.
  • 113.
  • 114.
  • 115.
  • 116.
  • 117.
  • 118.
  • 119.
  • 120.
  • 121.
  • 122.
  • 123.
  • 124.
  • 125.
  • 126.
  • 127.
  • 128.
  • 129.
  • 130.
  • 131.
  • 132.
  • 133.
  • 134.
  • 135.
  • 136.
  • 137.
  • 138.
  • 139.
  • 140.
  • 141.
  • 142.
  • 143.
  • 144.
  • 145.
  • 146.
  • 147.
  • 148.
  • 149.
  • 150.

嘎嘎 在这段代码里,服务端MM为每一个连接的客户端GG分配一个单独的线程,而每一个线程里都持有对应的客户端GG的Java 多客户端通信对象。SO,通过这些多线程,服务端MM就练就了一心N用的功力,可以同时接受N个客户端GG发来的情书了(,真的太贱了。。。。)

客户端的代码和上面的客户端代码一模一样的,这里就不多说啦!
 

【编辑推荐】

  1. Java线程通信简单调试方法介绍
  2. Java线程如何才能管理好自己的“小弟”
  3. Java线程和Objec之间的不解之缘
  4. Java线程池在运行后的结果反查
  5. Java线程池在使用中的问题解疑
责任编辑:张浩 来源: 博客园
相关推荐

2009-08-21 15:59:22

服务端与客户端通信

2009-08-21 16:14:52

服务端与客户端通信

2010-03-19 09:26:34

Java Socket

2011-09-09 09:44:23

WCF

2010-03-19 18:17:17

Java Server

2023-03-06 08:01:56

MySQLCtrl + C

2009-08-21 15:36:41

服务端与客户端

2009-08-21 15:54:40

服务端与客户端

2024-03-06 14:58:52

客户端微服务架构

2023-04-03 08:13:05

MySQLCtrl + C

2010-11-19 14:22:04

oracle服务端

2021-10-19 08:58:48

Java 语言 Java 基础

2014-08-11 16:35:35

KafkaJava客户端

2015-01-13 10:32:23

RestfulWeb框架

2010-07-19 16:30:19

Telnet客户端

2021-06-11 06:54:34

Dubbo客户端服务端

2010-03-18 16:49:43

Java Socket

2010-05-28 14:11:37

SVN1.6

2021-10-14 08:39:17

Java Netty Java 基础

2022-09-05 14:36:26

服务端TCP连接
点赞
收藏

51CTO技术栈公众号