网络通信之server/client通信的实现
来源:互联网 发布:逆战刷nz点软件免费版 编辑:程序博客网 时间:2024/06/05 21:12
网络通信之server/client通信的实现
要求:实现服务器客户端通信,当服务器启动后一旦有客户端连接上服务器,服务器便给连接上的客户端发送”欢迎光临!“。每增加一个客户端,服务器都将客户端放入arraylist中,并显示在线客户端数。而客户端向服务器发送消息时,服务器会接收客户端发来的消息并将消息转发给所以在线的客户端。客户端和服务器端都有自己的发送和接收数据的线程。
服务端要求实现的功能:
1.每连上一个客户端,就主动给客户端发送一句“欢迎光临!”。
2.使用ArrayList存放连上服务端的所有客户端。
3.当接收到客户端发送来的消息的时候,将这条消息转发给所有连上服务端的所有客户端。
思路:
1.创建一个服务器套接字(ServerSocket),绑定到指定端口。
2.调用accept方法,侦听来自客户端的请求,如果客户发出请求,则接受连接,返回通信套接字(Socket)。
3.创建线程来处理客户机:发送和接收消息。
服务端:
//服务器端public class MyServer {//使用ArrayList存放连上服务端的所有客户端public static ArrayList<Socket> sockets = new ArrayList<Socket>();public static void main(String[] args) {try {//创建一个服务器套接字,绑定到54321端口ServerSocket server = new ServerSocket(54321);System.out.println("服务器已启动,正在等待连接");while (true) {//调用accept方法,侦听来自客户端的请求Socket socket = server.accept();//将客户端发送过来的通信套接字添加到sockets动态数组中sockets.add(socket);//输出在线的客户端个数System.out.println("有" + sockets.size() + "个客户连接上");//启动发送线程,给客户端发送一句“欢迎光临!”new getOutputStream(socket).start();//启动接收线程,读取从客户端发来的消息new getInputStream(socket).start();}} catch (IOException e) {e.printStackTrace();}}}
服务端负责发送欢迎光临的线程类:
//发送线程负责给客户端发送一句“欢迎光临!”class getOutputStream extends Thread{private Socket s;public getOutputStream(Socket s) {this.s=s;}@Overridepublic void run() {try {//获取输出流OutputStream ops= s.getOutputStream();String msg="欢迎光临!\n";//将msg写入流ops.write(msg.getBytes());//刷新流ops.flush();} catch (IOException e) {e.printStackTrace();}}}
服务器端从客户端接收数据的线程类:
//接收线程,读取从客户端发来的消息class getInputStream extends Thread {private Socket r;public getInputStream(Socket r) {this.r = r;}public void run() {try {//获取输入流InputStreamReader is = new InputStreamReader(r.getInputStream());BufferedReader br = new BufferedReader(is);while (true) {//读取客户端发送过来的消息String msg = br.readLine();System.out.println("客户端发来" + msg);//读取客户端发送过来的消息后转发给所有在线的客户端for (Socket socket : MyServer.sockets) {OutputStreamWriter osw = new OutputStreamWriter(socket.getOutputStream());BufferedWriter bw = new BufferedWriter(osw);bw.write(msg + "\n");//刷新流bw.flush();}}} catch (Exception e) {e.printStackTrace();}}}
客户端
功能:
1.在命令行给服务端发送消息
2.当接收到服务端发来的消息的时候,将内容显示在控制台上
思路:
1.创建一个套接字(Socket) ,向服务器的侦听端口发出请求
2.与服务器正确连接后,获得输入/输出流,启动线程开始网络数据的接收和发送
客户端:
//客户端public class MyClient {public static void main(String[] args) {try {//创建一个套接字(Socket) ,向服务器的侦听端口发出请求Socket socket = new Socket("localhost", 54321);//启动读取数据线程,接收服务器发送过来的消息new Cread(socket).start();//启动发送数据线程,给服务器发送消息new Csend(socket).start();} catch (UnknownHostException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}}
客户端接收数据的线程类:
//读取数据线程,接收服务器发送过来的消息class Cread extends Thread {private Socket r;public Cread(Socket r) {this.r = r;}public void run() {try {while (true) {//获取输入流InputStreamReader is = new InputStreamReader(r.getInputStream());BufferedReader br = new BufferedReader(is);//按行读取从服务器发来的数据消息String content = br.readLine();System.out.println("服务端发来" + content);}} catch (UnknownHostException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}}
客户端发送数据线程类:
//发送数据线程,给服务器发送消息class Csend extends Thread {private Socket c;public Csend(Socket c) {this.c = c;}public void run() {try {//获取输出流OutputStreamWriter osw = new OutputStreamWriter(c.getOutputStream());BufferedWriter bw = new BufferedWriter(osw);//从键盘写入数据Scanner sc = new Scanner(System.in);while (true) {//将键盘写入的数据按行写入发送给服务器String msg = sc.nextLine() + "\n";bw.write(msg);System.out.println("给服务器发送" + msg);//刷新流bw.flush();}} catch (IOException e) {e.printStackTrace();}}}
0 0
- 网络通信之server/client通信的实现
- 网络通信之server/client通信的实现
- 实现Server和client端的通信
- select()网络通信之client
- 网络通信(Server和Client)
- TCP的Server和Client通信—Java实现
- 简单的socket UDP Client Server通信
- server-client之间的通信 吴素芬
- server-client之间的通信 刘峰
- socket通信server+client的C++版
- 网络代理服务Agent,服务端.client 连接server 进行通信
- 01 NIO网络通信框架 Netty server和client的api
- 工业通信:同一计算机上的OPC-Client如何与多个网络OPC-Server通讯?
- socket通信实现server端和client端互发消息
- Unity5.x实现简易语音聊天(三)Client-Server通信
- Python网络通信之socket模块(四)基于Tcp/Ip的TCP交互通信serve/client的编写过程
- netty5.0之Client端与Server端通信
- spice源码解析之 client-server 通信机制
- Spring整合Struts2和Hibernate+Maven(一)之Maven项目创建
- 《Java 2 图形设计卷Ⅱ- SWING》第4章 JComponent类
- js中三级联动的实现
- Web.xml配置详解
- 《Java 2 图形设计卷Ⅱ- SWING》第5章 边框、图标和动作
- 网络通信之server/client通信的实现
- 《Java 2 图形设计卷Ⅱ- SWING》第6章 实用工具
- 字节流字符流傻傻分不清
- Android Ashmem匿名共享内存 C++实例
- AFTER触发器和Instead Of触发器区别
- 《Java 2 图形设计卷Ⅱ- SWING》第7章 插入式界面样式
- 数据库及数据库文件的创建
- 《Java 2 图形设计卷Ⅱ- SWING》第8章 标签与按钮
- Oracle练习——建表、查询、过程、函数的使用