利用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
分享到:
相关推荐
总结起来,"Socket模拟客户端与服务端"的实践涉及到TCP协议、Socket编程以及两端的交互逻辑。通过"WindowsApplication1"和"WindowsApplication2"这两个应用程序,我们可以学习到如何在Windows环境下实现TCP Socket...
通过运行这两个脚本,你可以在本地模拟客户端和服务器的交互,理解TCP连接的建立和关闭过程。同时,这也是学习网络编程和Socket通信基础的好方式。实践中,你可以扩展这些基本示例,例如实现更复杂的协议或处理多...
SSD8 EX2可能包含了编写客户端和服务端代码的练习,以及相关的选择题,目的是检验对Socket编程的理解。这部分可能涉及到如何设置Socket参数,如何处理异常,如何实现数据的序列化与反序列化等。 六、2012303463-张...
在IT领域,C#是一种广泛使用的...总结来说,使用C#实现客户端和服务端通信涉及网络编程、文件操作、设备模拟、异步编程、安全性和错误处理等多个方面。理解这些概念和技术,是成为一名优秀的C#网络应用开发者的关键。
在这个特定的项目中,我们看到的是一个实现手机客户端与服务端通信的示例,这涉及到Android应用程序开发和Java网络编程的结合。下面我们将深入探讨相关知识点。 1. **Java Socket**: Java Socket 提供了低级别的...
- 虽然TCP协议通常用于不同计算机之间的通信,但在此场景下,我们可以在同一台机器上模拟客户端和服务端。只需确保两个程序使用不同的端口号,因为同一台机器上的两个进程不能同时监听同一个端口。 - 在测试时,...
本教程将探讨如何利用`webView`和`ServerSocket`在Android设备上模拟客户端和服务端的通讯。`webView`通常用于展示网页内容,而`ServerSocket`则在Java中用于创建服务器端套接字,允许我们监听并接收来自客户端的...
设计程序,分别构建通信的两端:服务器端和客户端应用程序,套接字类型为面向连接的Socket,自己构建双方的应答模式,实现双方的数据的发送和接收(S发给C,C发给S)。 服务端程序能响应单个或任意多个客户端连接请求...
4. **Socket编程**: 使用Socket创建客户端和服务端的连接,发送和接收音频数据。在Android中,通常使用ServerSocket监听连接,Socket用于建立连接。 5. **多线程处理**: 为了保证语音通话的流畅性,需要在后台线程...
在IT行业中,网络通信是至关重要的一个领域,特别是在开发实时通信应用时,如微信这样的聊天软件。本项目涉及的核心知识点是使用...这个项目是一个很好的学习实践平台,有助于提升对网络编程和实时通信应用开发的理解。
在标题和描述中提到的"Socket TCP UDP 客户端 服务器模拟工具",它是一个帮助开发者理解和实践TCP和UDP协议的工具。TCP(Transmission Control Protocol)和UDP(User Datagram Protocol)是互联网上最常用的两种...
在本示例中,“labview搭建的客户端和服务端”是一个使用LabVIEW实现的基本Socket通信系统,它模拟了客户端与服务器之间的交互,类似于日常使用的聊天软件如QQ或其他文件传输应用。 首先,我们需要理解Socket编程的...
它简化了客户端和服务端的创建,提供了模拟各种请求的功能,以及可能的日志记录、多线程支持和错误调试机制,使得网络通信的调试工作变得更加高效和便捷。对于IT从业者来说,掌握这类工具的使用是提高工作效率的重要...
在客户端和服务端之间进行数据传输时,我们可以通过`Socket`对象的`getInputStream()`和`getOutputStream()`方法获取输入流和输出流,从而实现双向通信。例如,发送数据到服务器: ```java OutputStream ...
在本文中,我们将深入探讨Socket模拟服务器的相关知识点,以及如何实现网络通讯数据的接收和处理。 首先,Socket是一种网络通信协议接口,它允许应用程序通过网络进行双向通信。在Java中,Socket类和ServerSocket类...
它可以模拟客户端和服务端,方便地发送和接收数据,查看网络交互过程,有助于定位网络通信中的问题。C#的网络调试助手可能包含以下功能:设置和连接到不同的IP和端口,发送和接收数据,显示通信日志,错误处理,以及...
通过这款软件,开发者可以深入理解即时通讯应用的工作原理,并且学习到如何在C#环境下构建服务端和客户端的通信机制。 首先,我们要了解C#语言本身。C#是微软公司推出的一种面向对象的编程语言,广泛应用于Windows...
本项目包括客户端和服务端两部分,确保了通信的双向性,实现了客户端发送请求和服务端响应的功能。 SGIP1.2接口是基于SGIP1.0的升级版本,主要优化了数据传输的效率和安全性,增加了更多的控制命令和功能,比如支持...
本示例将详细介绍如何使用Python实现一个简单的TCP套接字通信Demo,包括客户端和服务端的代码实现,以及它们如何进行交互。 首先,我们要理解TCP(传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信...
远程控制的核心是通过网络传输指令和数据,使客户端能够实时看到服务端的屏幕,并对其进行操作。在VC++环境下,这通常涉及到TCP/IP协议的使用,因为TCP提供了一种可靠的、面向连接的数据传输方式,适合于需要稳定性...