博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java实例练习——基于TCP/IP协议的多客户端通信
阅读量:5126 次
发布时间:2019-06-13

本文共 3352 字,大约阅读时间需要 11 分钟。

  先说一下大概的思路:

  应用多线程来实现服务器与多客户端之间的通信

  1、服务器端创建ServerSocket,循环调用accept()等待客户端连接;

  2、客户端创建一个Socket并请求与服务器端连接;

  3、服务器端接受客户端请求,创建Socket与该客户端简历专线连接;

  4、建立连接的两个Socket在一个单独的线程上对话;

  5、服务器端继续等待其他新的连接。

  闲话不多说,直接上代码:

package net;/** * 1、客户端 */import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.OutputStream;import java.io.PrintWriter;import java.net.Socket;import java.net.UnknownHostException;public class Client {	public static void main(String[] args) {				try {			//1、创建Socket,与服务器建立连接			Socket socket = new Socket("localhost", 8889);						//2、向服务器端发送消息			OutputStream os = socket.getOutputStream();						PrintWriter pwriter = new PrintWriter(os); //将Socket的输出字节流包装成打印流			pwriter.write("用户名:sysker ;  密码:sys154");						//刷新流			pwriter.flush();			//3、关闭资源			socket.shutdownOutput();						//3、获取输入流			InputStream inputStream = socket.getInputStream();			InputStreamReader inputStreamReader = new InputStreamReader(inputStream);			BufferedReader bufferedReader = new BufferedReader(inputStreamReader);			String getMsage=null;			while((getMsage=bufferedReader.readLine())!=null){				System.out.println("客户端正在等待响应,服务器说:"+getMsage);							}							//socket.shutdownInput();			bufferedReader.close();			inputStream.close();			inputStreamReader.close();			pwriter.close();			os.close();						socket.close();		} catch (UnknownHostException e) {			// TODO Auto-generated catch block			e.printStackTrace();		} catch (IOException e) {			// TODO Auto-generated catch block			e.printStackTrace();		}	}}
 
package net;/** * 2、服务器端 */import java.io.IOException;import java.net.ServerSocket;import java.net.Socket;public class ManyClientServer {	public static void main(String[] args) {		Socket socket = null;		int clientCount = 0;		try {			ServerSocket serverSocket = new ServerSocket(8889);			while(true){				socket = serverSocket.accept();				ManyClientThread manyClientThread = new ManyClientThread(socket);				manyClientThread.start();				clientCount++;				System.out.println("客户端数量"+clientCount);				System.out.println("客户端的IP地址:"+socket.getInetAddress().getHostAddress());			}						} catch (IOException e) {			// TODO Auto-generated catch block			e.printStackTrace();		}	}}
 
package net;/** * 3、服务器通信线程 */import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.net.Socket;public class ManyClientThread extends Thread{	Socket socket = null;	BufferedReader bufferedReader = null;	public ManyClientThread(Socket socket){		this.socket = socket;	}	public void run(){		try {						BufferedReader bufferedReader = new BufferedReader(					new InputStreamReader(socket.getInputStream()));			String mString = null;			while((mString = bufferedReader.readLine())!=null){				System.out.println("我是服务器,客户端说"+mString);							}			bufferedReader.close();			socket.close();		} catch (IOException e) {			// TODO Auto-generated catch block			e.printStackTrace();		}finally{			if(bufferedReader!=null){				try {					bufferedReader.close();				} catch (IOException e) {					// TODO Auto-generated catch block					e.printStackTrace();				}			}			if(socket!=null){				try {					socket.close();				} catch (IOException e) {					// TODO Auto-generated catch block					e.printStackTrace();				}			}								}			}}
 

转载于:https://www.cnblogs.com/caoleiCoding/p/6441622.html

你可能感兴趣的文章
python全栈开发中级班全程笔记(第三模块、第一章(多态、封装、反射、内置方法、元类、作业))...
查看>>
python全栈开发中级班全程笔记(第三模块、第二章(网络编程))
查看>>
30分钟部署一个Kubernetes集群
查看>>
gitlab部署
查看>>
gitlab数据迁移
查看>>
samba安装配置
查看>>
redis数据备份还原
查看>>
centos7 dns(bind)安装配置
查看>>
Keepalived+LVS+nginx搭建nginx高可用集群
查看>>
CAA调试
查看>>
BZOJ3123[Sdoi2013]森林——主席树+LCA+启发式合并
查看>>
BZOJ3523[Poi2014]Bricks——贪心+堆
查看>>
Android 二维码 生成和识别(附Demo源码)
查看>>
查询sql server占用内存的情况
查看>>
react-01
查看>>
sublime插件安装
查看>>
SetForegroundWindow
查看>>
数据库存储系统应用,超市小票系统
查看>>
Git
查看>>
DB Change
查看>>