`

socket模拟客户端和服务端实时通信

阅读更多

利用java网络编程实现客户端跟服务器之前相互发送接受消息的功能,首先启动服务器,然后运行客户端,接着在客户端的控制台下,发送消息,然后切换到服务器控制台,即可看到客户端的消息,并对其进行回复,然后切换到服务端的客户端控制台,查看到效果,以达到相互通信发消息的功能,效果图如下:




 

首先新建一个java项目,并新建SocketService.java,代码如下:

 

package ch03;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;

public class SocketService
{
    public static void main(String[] args) throws Exception
    {
        try{
            ServerSocket server=null;
            try{
                server=new ServerSocket(4700);
                //创建一个ServerSocket在端口4700监听客户请求
            }catch(Exception e) {
                System.out.println("can not listen to:"+e);
                //出错,打印出错信息
            }
            Socket socket=null;
            try{
                socket=server.accept();
                //使用accept()阻塞等待客户请求,有客户
                //请求到来则产生一个Socket对象,并继续执行
            }catch(Exception e) {
                System.out.println("Error."+e);
                //出错,打印出错信息
            }
            String line;
            BufferedReader is=new BufferedReader(new InputStreamReader(socket.getInputStream()));
            //由Socket对象得到输入流,并构造相应的BufferedReader对象
            PrintWriter os=new PrintWriter(socket.getOutputStream());
            //由Socket对象得到输出流,并构造PrintWriter对象
            BufferedReader sin=new BufferedReader(new InputStreamReader(System.in));
            //由系统标准输入设备构造BufferedReader对象
            System.out.println("Client:"+is.readLine());
            //在标准输出上打印从客户端读入的字符串
            line=sin.readLine();
            //从标准输入读入一字符串
            while(!line.equals("bye")){
                //如果该字符串为 "bye",则停止循环
                os.println(line);
                //向客户端输出该字符串
                os.flush();
                //刷新输出流,使Client马上收到该字符串
                System.out.println("Client:"+is.readLine());
                //从Client读入一字符串,并打印到标准输出上
                line=sin.readLine();
                //从系统标准输入读入一字符串
            } 
            os.close(); //关闭Socket输出流
            is.close(); //关闭Socket输入流
            socket.close(); //关闭Socket
            server.close(); //关闭ServerSocket
        }catch(Exception e){
            System.out.println("Error:"+e);
            //出错,打印出错信息
        }
    }
}

 

然后,新建SocketClient.java,代码如下:

 

package ch03;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;

public class SocketClient
{
    public static void main(String[] args)
    {
        try{
            Socket socket=new Socket("127.0.0.1",4700);
            //向本机的4700端口发出客户请求
            BufferedReader sin=new BufferedReader(new InputStreamReader(System.in));
            //由系统标准输入设备构造BufferedReader对象
            PrintWriter os=new PrintWriter(socket.getOutputStream());
            //由Socket对象得到输出流,并构造PrintWriter对象
            BufferedReader is=new BufferedReader(new InputStreamReader(socket.getInputStream()));
            //由Socket对象得到输入流,并构造相应的BufferedReader对象
            String readline;
            readline=sin.readLine(); //从系统标准输入读入一字符串
            while(!readline.equals("bye")){
                //若从标准输入读入的字符串为 "bye"则停止循环
                os.println(readline);
                //将从系统标准输入读入的字符串输出到Server
                os.flush();
                //刷新输出流,使Server马上收到该字符串
                System.out.println("Server:"+is.readLine());
                //从Server读入一字符串,并打印到标准输出上
                readline=sin.readLine(); //从系统标准输入读入一字符串
            } //继续循环
            os.close(); //关闭Socket输出流
            is.close(); //关闭Socket输入流
            socket.close(); //关闭Socket
        }catch(Exception e) {
            System.out.println("Error"+e); //出错,则打印出错信息
        }

    }
}

 

最后,先运行SocketService.java,开出通信的端口号等等,再运行SocketClient.java,去根据端口,ip等进行连接,然后就可以通信了,如上图所示,客户端发完一条后,服务端可以马上收到,并进行回复,然后客户端就会立刻收到服务端的回复,以此循环进行通信。

 

  • 大小: 27.1 KB
  • 大小: 34.7 KB
  • 大小: 34.9 KB
分享到:
评论

相关推荐

    plc、socket、tcpip测试程序模拟客户端服务端串口

    类似友善串口助手的一个小工具,功能更多更强大,各类主流plc的数据调试和串口调试类似友善串口助手的一个小工具,功能更多更强大,各类主流plc的数据调试和串口调试

    android下客户端与python服务端通信.zip

    这是一个简单的模拟android通信,这也是第一篇博客描述的项目,他实现了用python脚本充当服务端,android下写客户端,tcp模式连接,通过socket连接到服务端,实现简单的信息传递

    mono for andriod-socket-tcpip-手机客户端与服务端

    实现简单的 Socket --TCP/IP 通信。 其实,使用的类 和语法代码与 普通PC机的一样。但 手机客户端,还是有点点区别。 在pc客户端中,使用线程收取 信息,然后打印到UI控件上,是使用委托进行。 在手机APP中,有...

    Socket-master_socketdemo_mastersocket_

    实现Socket客户端和服务端,模拟消息发送和接收,实现客户端和服务端通信;

    java大作业基于socket通信的模拟路灯控制系统源码.zip

    java基于socket通信的模拟路灯控制系统源码。socket通信,远程控制路灯的开关,以及采集周围环境信息(温湿度等) 普通的java的swing项目,克隆下来运行即可,环境量都是模拟的。 不过记得先运行服务端再运行客户端...

    Python 网络编程之TCP客户端/服务端功能示例【基于socket套接字】

    主要介绍了Python 网络编程之TCP客户端/服务端功能,结合实例形式分析了Python使用socket套接字实现TCP协议下的客户端与服务器端数据传输操作技巧,需要的朋友可以参考下

    socket抓包工具

    tcp udp 模拟客户端、服务端,对于网络通信,调试非常方便,希望能给大家带来便利

    [C#通信二]C#.net同步异步SOCKET通讯和多线程总结

    C#.net同步异步SOCKET通讯和多线程总结 ...服务器端建立一个socket,设置好本机的ip和监听的端口与socket进行绑定,开始监听连接请求,当接收到连接请求后,发送确认,同客户端建立连接,开始与客户端进行通信。

    默蓝网络通信测试工具(NIOSocket工具)支持TCP/IP和HTTP通信-网络通信开发人员必备

    网络通信工具,服务端和客户端连接测试工具,可单条发送,循环发送,模拟多客户端发送,本工具可以作为网络通信工具或压力测试工具, Java NIO Socket编程,需JAVA运行环境

    IIS简单模拟(C#)

    产生一个新的代理socket和客户端进行通信(原来的侦听端口的socket释放,继续侦听其他客户端的请求)同时开启一个新的线程接收客户端消息 5.分析客户端的请求报文,对请求的文件返回响应报文 http/1.1中的长连接的...

    Socket通信实例

    内含5个socket的通信实例,实现客户端与服务端之间的信息交流,从简单到复杂,有模拟QQ通信功能,很好的让你理解socket通信。

    TCP、UDP测试工具

    TCP、UDP通信测试工具,可以模拟socket客户端与服务端做代码测试

    socket文件传输

    在完成客户端与服务端通信的基础上,开发断点续传的模拟功能,实现在接收文件时,可以用暂停,并且在重新开始时将文件写入指定位置

    基于springboot+netty+mybatis+hbase+kafka实现的socket server+源代码+文档说明

    > * client 作为模拟客户端,跟server1建立连接后,不断给服务端发送假数据 整个项目启动后,主要做了下面几件事: - [ ] 创建socket server和socket client,并建立连接 - [ ] 执行定时任务,每5秒socket server往...

    默蓝网络通信TCP/Socket调试工具(32位)

    1、支持TCP/IP协议的网络通信,TCP服务端和客户端,可单条发送,循环发送,模拟多客户端发送; 2、支持HTTP协议的网络通信, HTTP协议的服务端和客户端连接测试工具; 3、网络扫描工具,可扫描主机端口及扫描局域网内的...

    默蓝网络通信TCP/Socket调试工具(64位)

    1、支持TCP/IP协议的网络通信,TCP服务端和客户端,可单条发送,循环发送,模拟多客户端发送; 2、支持HTTP协议的网络通信, HTTP协议的服务端和客户端连接测试工具; 3、网络扫描工具,可扫描主机端口及扫描局域网内的...

    基于TCP的模拟聊天室

    这是一个基于TCP协议的socket模拟聊天室代码 可以再Linux平台下运行 开启一个服务端 可以开启多个客户端 客户端之间可以进行通信

    android手机网络聊天室

    2、循环接收请求访问该端口的客户端,接收到之后,把该socket存储到ArrayList中,并且为每一个socket开启一个线程用于通信。 3、每个socket的线程的逻辑如下:循环接收客户端发来的消息,接收到之后,利用之前的...

    基于C语言开发的p2p聊天软件系统.zip

    资源包含文件:课程lunwen+客户端服务端源码 模拟服务器的设计采用了经典的服务器监听设计,服务器在端口,8000 进行监听,当有客户端发送消息时开辟一个新的线程对其内容进行处理并回复。 本项目的界面包括客户端和...

    基于C/S架构的的socket通信,java模拟路灯控制系统源码,远程控制路灯的开关,以及采集周围环境信息(温湿度等)

    基于C/S架构的的socket通信,远程控制路灯的开关,以及采集周围环境信息(温湿度等) 普通的java的swing项目,克隆下来运行即可,环境量都是模拟的。 不过记得先运行服务端再运行客户端

Global site tag (gtag.js) - Google Analytics