第八天、实现Socket服务端和客户端即时通信
来源:互联网 发布:读博士 知乎 编辑:程序博客网 时间:2024/05/18 02:31
由于即时通讯同时要接受来及远程Socket实例的消息,和发送消息给远程Socket实例。因此要建立两个线程分别来持续接受远端发送来的消息,和持续监听本地的输入并将其发送远程客户端。
一、服务端代码
package com.net;import java.net.*;import java.io.*;/** * Description: * 搭建一个服务端来与客户端进行即时通行 * * @author Lee * */public class ServerDemo{ /** * Description: * 实现一个服务端实例,获取远程客户端实例即时通行 * * */ public static void getClient(){ ServerSocket server = null; Socket client = null; try{ //以指定的端口实现一个Socket服务端实例 server = new ServerSocket(12000); while(true){ //获取客户端实例 client = server.accept(); System.out.println("已连接上"+client.getInetAddress()+"客户端,"+client.getPort()+"端口"); //启动持续接受远程客户端消息,即输入流 new Accept("client",client).start(); //启动持续监控控制台输入,将其传送远程客户端 new Return("client",client).start(); } }catch(IOException e){ e.printStackTrace(); }finally{ //关闭资源 try{ server.close(); client.close(); }catch(IOException e){ e.printStackTrace(); } } } public static void main(String[] args) { // TODO Auto-generated method stub getClient(); }}
二、客户端代码
package com.net;import java.net.*;import java.io.*;/** * Description: * 实现一个客户端与远程服务端进行即时通行 * * @author Lee * */public class ClientDemo { /** * Description: * 实现一个客户端与远程服务端进行即时通行 * */ public static void getServer(String ip,int port){ Socket server = new Socket(); try{ //连接远程服务端 server.connect(new InetSocketAddress(ip,port)); System.out.println("已连接上"+server.getInetAddress()+"服务端,"+server.getPort()+"端口"); //启动持续接受远程服务端的消息,即输入流 new Accept("client",server).start(); //启动持续监控控制台输入,将其传送远程服务端 new Return("client",server).start(); }catch(IOException e){ e.printStackTrace(); } } public static void main(String[] args) { //此处应该改写为服务端的IP地址 getServer("192.168.20.15",12000); }}
三、接受消息线程代码
package com.net;import java.net.*;import java.io.*;import java.util.Scanner;/** * Description: * 实现持续监控远程Socket的消息,即输入流,并将其输出在控制台上 * * */public class Accept extends Thread{ Socket socket ; /** * Description: * 默认构造器 * */ public Accept(){} /** * Description: * 通过初试化Socket,name变量来构造Accept实例 * * @param name 该远程Socket实例的名字 * @param socket Socket实例 * */ public Accept(String name,Socket socket){ this.setName(name); this.socket = socket; } @Override public void run(){ Scanner input = null; try{ //获取远程Socket实例的输入流 input = new Scanner(socket.getInputStream()); //将输入流的内容输出之控制台上 while(input.hasNext()){ System.out.println(this.getName()+":"+input.next()); } }catch(IOException e){ e.printStackTrace(); }finally{ //关闭资源 input.close(); } }}
四、发送消息线程
package com.net;import java.net.*;import java.io.*;import java.util.Scanner;/** * Description: * 持续地监控控制台上的输入,并将其发送给远程Socket实例 * * @author Lee * */public class Return extends Thread{ Socket socket; /** * Description: * 默认构造器 * */ public Return(){} /** * Description: * 通过初试化Socket,name变量来构造Return实例 * * @param name 该远程Socket实例的名字 * @param socket 远程Socket实例 * */ public Return(String name,Socket socket){ this.setName(name); this.socket = socket; } @Override public void run(){ PrintWriter output = null; Scanner keyboard = null; try{ //获取远程Socket实例的输出流 output = new PrintWriter(socket.getOutputStream()); //获取控制台的输入 keyboard = new Scanner(System.in); //监控控制台上的输入,将其输出给输出流 while(keyboard.hasNext()){ output.println(keyboard.nextLine()); output.flush(); } }catch(IOException e){ e.printStackTrace(); }finally{ //关闭资源 output.close(); } }}
我们可以用telnet连接一下服务端,连接成功!
也可以看到java控制台上,有关于客户端的IP地址和连接端口,可以试一下发送消息给远程客户端。
可以看到远程客户端已收到了消息
0 0
- 第八天、实现Socket服务端和客户端即时通信
- Socket服务端和客户端通信
- socket服务端和客户端通信
- Socket实现手机客户端和PC机服务端通信
- 采用异步socket实现客户端和服务端的通信
- socket网络编程实现客户端和服务端通信
- Socket TCP 协议实现服务端和客户端的简单通信
- nodejs socket实现的服务端和客户端简单通信
- Socket实现服务端与客户端通信
- 简单的Socket通信客户端和服务端
- socket建立服务端和客户端之间通信
- C#socket通信(客户端和服务端)
- socket 实现即时通信
- socket实现客户端与服务端通信(一)服务端
- socket实现客户端与服务端通信(三)服务端升级
- socket实现客户端与服务端通信(二)客户端
- socket通信-服务端-客户端-实现多个客户端群聊
- Socket 客户端和服务端无限次通信,多个客户端和服务端通信的例子
- 将数组a中的n个整数按相反顺序存放。(指针)
- android studio 导入新项目很慢的解决方法
- DataView详解
- Uva400 Unix is
- jStorm 流分发-订阅机制测试
- 第八天、实现Socket服务端和客户端即时通信
- Ubuntu16.04出现黑屏问题,没有账户的图标,进入不了图形
- Ubuntu16.04下Caffe环境搭建:cuda8.0 + opencv2.4.13
- HDOJ(HDU).2660 Accepted Necklace (DFS)
- 监督学习-朴素贝叶斯算法模板
- OSI模型中完整7层定义
- sudo apt-get install libopencv-dev 遇到ppa获取错误的问题
- HDU 1002:A + B Problem II
- android gridLayout