通信的简单实现
物理上的一台电脑有很多端口,[每个端口都可以起到服务端或客户端的作用,所以在建立客户端是要选择哪一个端
口,当在自己的电脑上面运行一个服务端程序是,本台主机就是服务器,当我们用CMD命令行
时,如果用的命令是telnet 127.0.0.1 XXXX(指端口号),相当于服务器连接的主机客户端是本台主机,这是,我们运行程序的这台主机就充当了服务器和客户端两个角色,如果ip地址的位置改为其他的,则该ip地址代表的那台主机就代表客户端,例如,telnet 198.168.1.120 XXXX,那么现在我的主机就只充当服务器,而由198.168.1.120这台主机充当客户端。
Socket可以看成在两个程序进行通讯连接中的一个端点,一个程序将一段信息写入Socket中,该Socket将这段信息发送给另外一个Socket中,使这段信息能传送到其他程序中。
套接字相当于一个媒介,用来在服务器和客户端之间转送信息。那么,服务器要能接收从客户端发来的消息的话,的有一个这样的一个服务器套接字对象 ServerSocket ss,处理异常,创建之后,服务器就处于等待状态,等待有数据输入过来。
通信,其最核心的东西不过是服务器和客户端之间消息的发送,对每一方都有两种情况,消息的输入和输出,所以得有输入流和输出流对象(InputStream和OutputStream)。
服务器给客户端发送的消息
消息是一个字符串,输出流写[/size]这条消息时事一个个字节写出去的,所以先把要输出的字符串放在一个字节数组里存储再写。例如
String s="中国";
byte[] bs=s.getBytes();
out.write(bs);
客户端给服务器发送消息,服务器在接收消息是也是只能一个字节一个字节的读取,所以首先要有一个对象接收读取得此消息t,建立一个缓冲数组来暂存读了的字节,等到整条消息都读完后在一起转为字符串输出;但是,有怎么样判断一条消息是否已经读完呢,所以,我们可以设置一个结束标志,当计算机读到该标志时就结束读取工作,代码如下:
//以本台主机位服务器,要读取客户端发来的消息的话,要建立一个对象接收读出来的消息
int t=ins.read();
//若需要将读进去的字符串输出来,可用一个缓冲数组存放,当一条消息读完之后再把给消息以字符串的形式转出来
java.lang.StringBuffer str=new java.lang.StringBuffer();
//对于一条消息总该有个结束的标志,我们一遇到#结束,故用一个循环
while(t!='#'){
System.out.println("the char is"+t);
//接着读取下一个字节
t=ins.read();
//把字节打印出来
str.append((char)t);
}
//把字节转换成字符串打印
String ims=str.toString();
System.out.println("the message is:"+ims);
(3)全部代码
package tx2014713;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
//简单的客户端
/**
*
* @author liuli
* @port 电脑上的某个端口,需要自己指定
*/
public class Sever {
//客户端中的一个执行任务的函数,在主函数中调用,物理上的一台电脑有好很多端口,
//每个端口都可以起到服务端或客户端的作用,所以在建立客户端是要选择哪一个端口
public void setup(int Port){
//接下来就到通信的入点,建立服务器套接字,并指定服务器端口
try {
ServerSocket ss=new ServerSocket(Port);
System.out.println("你访问的端口是:"+Port);
//此时服务器处于阻塞状态,在等待客户端的访问
//当有客户端访问了之后,服务器的等待方法结束,返回一个代表与客户端连接的对象
while(true){ //服务器进入循环等待状态,即当一个客户端访问完了之后,服务器不会随之而关闭
Socket socket=ss.accept();
//建立套接字对象之后,服务器要和客户端交换信息的话,需要建立输入输出流
InputStream ins=socket.getInputStream();
OutputStream out= socket.getOutputStream();
//服务器要发送给客户端的一串字符串
String s="丽丽";
//计算机在读消息是不能直接读取字符串而是一个一个的字节读,所以先把字符串读到一个字节数组中存放起来
byte[] bb=s.getBytes();
//通过输出流对象将字节数组的内容写出去
//out.write(bb);
out.write(s.getBytes("GBk"));
//以本台主机位服务器,要读取客户端发来的消息的话,要建立一个对象接收读出来的消息
int t=ins.read();
//若需要将读进去的字符串输出来,可用一个缓冲数组存放,当一条消息读完之后再把给消息以字符串的形式转出来
java.lang.StringBuffer str=new java.lang.StringBuffer();
//对于一条消息总该有个结束的标志,我们一遇到#结束,故用一个循环
while(t!='#'){
System.out.println("the char is"+t);
//接着读取下一个字节
t=ins.read();
//把字节打印出来
str.append((char)t);
}
//把字节转换成字符串打印
String ims=str.toString();
System.out.println("the message is:"+ims);
}
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
Sever se=new Sever();
se.setup(5678);
}
分享到:
相关推荐
Android中socket通信简单实现 socket通信需要有一个服务器和客户端,可以把同一个APP作为服务器跟客户端,也可以分开成两个APP。 先上个图: 这里以一个APP作为服务器跟客户端为示例 1、添加网络访问权限 2、写...
在开始深入探讨MFC中UDP通信的实现之前,我们首先要理解TCP与UDP在网络通信中的区别。TCP协议是一种面向连接的、可靠的传输层协议,它提供了错误检测和确认机制,确保数据包能够准确、有序地到达目的地。因此,TCP在...
本示例中,我们探讨的是如何通过Java实现一个简单的Socket通信服务,包括客户端和服务端。 首先,让我们理解什么是Socket。Socket是网络通信中的一个抽象概念,可以看作是两台计算机之间建立连接的端点,也称为套接...
LabVIEW通信,原理是一个服务端,一个发送端,一个读取端,需要配置datasocker manager 里面的数据接口,源代码需要稍做修改,要根据每个人计算机的IP地址来.
在MFC(Microsoft Foundation Classes)框架下实现串口通信,可以方便地创建与硬件设备交互的应用程序。MFC提供了一套类库,使得开发者能够更加简单、高效地处理串口通信的细节。 首先,我们要了解串口通信的基本...
本示例主要讲解如何利用其内置的简单CPU通信功能实现以太网通信,以便于不同设备间的数据交互。 首先,简单CPU通信功能允许FX5U系列PLC与其他设备进行快速且直接的数据交换,无需复杂的网络配置。这种通信方式适用...
### 三菱FX5U与西门子S7-1200通过简单CPU通信设置实现以太网通信功能的具体方法步骤 #### 一、概述 本文档旨在详细介绍三菱FX5U PLC与西门子S7-1200 PLC之间通过简单CPU通信设置实现以太网通信的具体步骤。通过这些...
本主题将深入探讨如何实现基于Socket的简单通信协议,主要包括以下几个方面: 一、Socket基本概念 Socket,通常称为套接字,是网络编程中的一个抽象概念,用于在网络上的两个进程间建立通信连接。在TCP/IP协议栈中...
本教程将深入探讨如何利用Socket库在Python中实现客户端与服务器之间的简单通信,这涉及到TCP/IP协议中的三次握手和四次挥手过程。 首先,我们来看TCP(传输控制协议)的三次握手。三次握手是为了确保连接的可靠性...
标题所述的文档主要介绍了如何使西门子S7-1200 PLC与三菱FX5U系列PLC之间通过简单的CPU通信功能实现以太网通信。以下是对这一具体方法的详细说明: 首先,确保西门子S7-1200 PLC的配置正确。在西门子TIA Portal软件...
本文将深入探讨如何利用Python和PyCrypto实现简单的加密通信。 首先,PyCrypto是一个包含了大量加密算法的Python库,包括对称加密(如AES、DES)、非对称加密(RSA、DSA)、哈希函数(MD5、SHA)等。在我们的案例中...
"基于TCP协议的简单即时通信软件的设计与实现" 本文主要介绍了基于TCP协议的简单即时通信软件的设计与实现,旨在设计一个能够处理多用户进行实时、安全的即时通信系统。本系统采用C/S模式,服务器负责客户端的登录...
字符通信相对简单,直接发送ASCII码即可;而文件通信则涉及到文件读取、缓冲区管理和数据分包等多个步骤。 在实现文件传输时,我们通常会先将文件读入内存,然后将其拆分成若干数据包,每个数据包包含一定量的数据...
在这个项目中,"OC简易通信录实现"涉及了多个关键知识点,包括数据模型设计、用户界面构建、数据存储和检索、以及基本的事件处理。下面将对这些知识点进行详细解释。 首先,我们需要建立数据模型来表示联系人。在OC...
它通过一条或几条数据线,依次传输每一位数据,速度相对较慢,但硬件简单、成本低,适合远距离通信。串口通信的核心参数包括波特率、数据位、停止位和校验位,这些参数需在通信双方设置一致才能正常通信。 VC++...
Java实现的简单Socket通信是网络编程中的基础技术,主要用于设备间的双向数据传输。在这个场景中,我们有两个窗口,一个作为服务器端,另一个作为客户端,它们通过TCP协议进行通信。TCP是一种面向连接的、可靠的传输...
在本设计中,作者通过将单片机与蓝牙模块相连接,实现了一个简易的无线通信系统。文中提到,通信过程中单片机与蓝牙模块之间的通信是通过串行方式进行的,且为保证数据准确传输,设计中使用了八个指示灯来显示通信...
`pyModbusTCP`是Python的一个开源库,它提供了一个简单易用的接口来实现Modbus TCP通信。这个库允许我们创建Modbus服务器(即服务端)和客户端,从而实现设备间的通信。 1. **创建Modbus客户端** 使用`pyModbusTCP...
双机通信通常涉及到串行通信,因为其硬件简单,只需一对线路即可实现数据传输。串行通信分为异步和同步两种方式,其中ASCII字符方式通常属于异步通信,它在数据传输前会加上起始位和停止位,以确保数据的正确接收。...