socket通信范文

时间:2023-03-11 23:38:03

socket通信

socket通信范文第1篇

关键词:套接字;会话层;数据报;TCP套接字;UDP套接字

中图分类号:TP393 文献标识码:A文章编号:1009-3044(2010)02-334-03

On the Socket Communication is Implemented in PowerBuilder

LU Lu, WANG Yan-ping

(Zhengzhou Railway Vocational and Technical College, Zhengzhou 450052, China)

Abstract: With the computer technology and network communication technology, Socket technology has become the basis of network programming, SocketAPI provide a process of communication between. PowerBuilder as a program development language in the development of information management systems and a variety of cross-platform database has a wide range of applications. Article a brief introduction of the Socket communication theory and the use of methods, and to chat program as an example to explain how to use Winsock control in PowerBuilder to enhance network capabilities to achieve Socket Communications.

Key words: socket; session layer; datagrams; TCP socket; UDP socket

Socket编程接口由4BSD UNIX首先提出,目的是解决不同网络间通信问题。Socket接口为进程间通信提供了一种新的手段,它不但能用于同一机器中的进程之间的通信,而且支持网络通信功能。要想弄清楚Socket的工作原理,必须对网络通讯技术有所了解。在计算机界,为了保证各种网络、各种机器、各种操作系统之间能进行互联,进行数据交换,采取了开放式互联模型,即OSI模型,它将网络通讯划分为7个层次。

1 OSI七层模型概述

OSI模型成为计算机之间,以及网络间进行通信的主要的结构模型。从上到下,各层名称及其描述依次为:

1) 第七层:应用层(Application Layer):定义了用于在网络中进行通信和数据传输的接口 ―用户程式;提供标准服务,比如虚拟终端、文件以及任务的传输和处理。

2) 第六层:表示层(Presentation Layer):掩盖不同系统间的数据格式的不同性;指定独立结构的数据传输格式;进行数据的编码和解码、加密和解密、压缩和解压缩。

3) 第五层:会话层(Session Layer):管理用户会话和对话;控制用户间逻辑连接的建立和挂断;报告上一层发生的错误。

4) 第四层:传输层(Transport Layer):管理网络中端到端的信息传送;通过错误纠正和流控制机制提供可靠且有序的数据包传送;提供面向无连接的数据包的传送。

5) 第三层:网络层(Network Layer):定义网络设备间如何传输数据;根据唯一的网络设备地址路由数据包;提供流和拥塞控制以防止网络资源的损耗。

6) 第二层:数据链路层(Data Link Layer):定义操作通信连接的程序;封装数据包为数据帧;监测和纠正数据包传输错误。

7) 第一层:物理层(Physical Layer):定义通过网络设备发送数据的物理方式;作为网络媒介和设备间的接口;定义光学、电气以及机械特性。

通过OSI模型,信息可以从一台计算机的软件应用程序传输到另一台的应用程序上。比如,要实现计算机A与计算机B之间通信,实际上,通信过程是计算机A上的应用程序要将信息发送到计算机B的应用程序。中间过程如下:

计算机A中的应用程序需要将信息先发送到其应用层(第七层),然后此层将信息发送到表示层(第六层),表示层将数据转送到会话层(第五层),如此继续,直至物理层(第一层)。在物理层,数据被放置在物理网络媒介中并被发送至计算机B。计算机B的物理层接收来自物理媒介的数据,然后将信息向上发送至数据链路层(第二层),数据链路层再转送给网络层,依次继续直到信息到达计算机B的应用层。最后,计算机B的应用层再将信息传送给应用程序接收端,从而完成通信过程。

2 Socket概述

2.1 套接字(Socket)所处位置

套接字大致位于OSI模型的会话层。会话层为两台计算机之间的数据流提供管理和控制服务。作为该层的一部分,套接字提供一个隐藏从导线上获取比特和字节的复杂性的抽象。换句话说,套接字允许我们让应用程序表明它想发送一些字节即可传输数据。套接字隐藏了完成该项工作的具体细节。

2.2 套接字的类型

套接字一般有两种类型:TCP套接字和UDP套接字。两者都接收传输协议数据包并将其内容向前传送到表示层。

TCP 把消息分解成数据包(数据报,Datagrams),并在接收端以正确的顺序把它们重新装配起来。TCP 还处理对遗失数据包的重传请求。有了 TCP,位于上层的层要担心的事情就少多了。

UDP 不提供装配和重传请求这些功能。它只是向前传送信息包。位于上层的层必须确保消息是完整的并且是以正确的顺序装配的。一般而言,UDP 强加给您的应用程序的性能开销更小,但只在应用程序不会突然交换大量数据并且不必装配大量数据报以完成一条消息的时候。否则,TCP 才是最简单或许也是最高效的选择。

2.3 Socket的使用方法

下面,我们一一给出重要的Socket系统调用的使用方法。

1) 创建 Socket。调用格式为:sockid = socket (af, type, protocol)其参数意义如下:

af:地址族,指本socket所用地址类型。

type:类型,指创建socket的应用程序所希望的通信服务器类型。

protocol:协议,指该socket请求的协议。

2) 指定本地地址―bind()调用。

bind()将本地socket地址与所创建的socket联系起来,即将本socket地址赋予socket,以指定本地半相关。bind()的作用相当于给socket命名,调用格式为bind(sockid,localaddr,addrlen)

其参数意义如下:

sockid:socket号。

localaddr:本地socket地址。

addrlen:地址长度。

3) 建立socket连接―connect()与 accept()调用。

这两个系统调用用于完成整个相关的建立。其中connect用于建立连接。调用格为

connect(sockid,destaddr,addrlen),其中destaddr为指向对方socket地址(信宿地址)结构的指针。

accept()用于面向连接的服务器,其调用格式为:

newsock =accept(sockid,clientaddr,paddrlen),其中clientaddr为指向客户socket地址指针,paddrlen为客户socket地址长度。

4) listen()调用

此调用用于面向连接服务器,表明它愿意接收连接,listen()在accept()之前调用,格式为

listen (sockid,quelen),其中quelen 为请求队列长度。

5) 发送数据―write(),writev(),send()与sendto(),sendmsg()

用于socket数据发送的系统调用一共有五个,其中三个,write(),writev()和send()用于面向连接传输,其余两个用于无连接传输。面向连接的调用可以不指定信宿地址,而无连接的调用必须指定。假如无连接socket的双方均调用过connect(),可以认为是建立有连接的socket,也可以面向连接调用发送数据。

6) 接收数据―read(),readv(),recv()与recvfrom(),recvmsg()

接收数据与发送数据系统调用是一一对应的,两者参数的最大区别是,前者buffer是一个指针,其所指单元初值为欲读数据长度,调用后的值是实际读出的值。

2.4 Socket控件

针对Socket API存在的使用复杂、同步阻塞等问题,Microsoft公司对其进行了封装,开发了WinSock控件。该控件具体使用简单、可靠性强、支持事件等特性,对于开发人员而言,就是一个典型的对象,有属性、方法和事件,因此可以极高地提高软件的开发效率。

Winsock控件对用户是不可视的,可以很容易地访问TCP和UDP网络服务。其可以被Microsoft Access, Visual Basic,Visual C++或Visual FoxPro开发人员使用。要编写客户和服务器应用程序,不需要了解TCP或调用底层Winsock API的具体细节。通过设置Winsock控件的属性和调用该控件的方法,可以很容易地连接到远程计算机并进行双向的数据交换。

数据传输协议允许创建和维护与远程计算机的连接。连接两台计算机就可彼此进行数据传输。

如果创建客户应用程序,就必须知道服务器计算机名或者IP地址(RemoteHost属性),还要知道进行“侦听”的端口(RemotePort属性),然后调用Connect方法。

如果创建服务器应用程序,就应设置一个收听端口(LocalPort属性)并调用Listen方法。当客户计算机需要连接时就会发生ConnectionRequest事件。为了完成连接,可调用ConnectionRequest事件内的Accept方法。

建立连接后,任何一方计算机都可以收发数据。为了发送数据,可调用SendData方法。当接收数据时会发生DataArrival事件。调用DataArrival 事件内的GetData方法就可获取数据。

3 在PB中使用Socket控件的方法

3.1 注册控件

Winsock控件是微软件公司提供的处理网络通信的控件,用它可以进行局域网或则INTERNET的编程开发。该控件并不是默认随Windows 操作系统自带的。有两种方法可以获得它,一是通过安装Visual Studio开发环境; 另外一个方法是下载MsWinsck.ocx文件,然后使用“regsvr32 mswinsck.ocx”命令行进行注册。下面以聊天程序为例演示具体用法。

3.1.1 创建服务器端程序

打开PowerBuilder,然后创建WorkSpace和application对象;创建主窗口w_server对象,并放置控件,如图1所示。

接下来为控件的事件写入以下代码:

Cb_listen控件的clicked事件:

ole_socket.object.localport = 1500;

ole_socket.object.listen();

lb_msg.additem ("开始监听");

ole_socket控件的ConnectionRequest事件

if this.object.state 0 then

this.object.close();

end if

this.object.accept( requestid);

lb_msg.additem ("己经和客户端建立连接!");

ole_socket控件的DataArrival事件

string buf;

this.object.getdata ( ref buf);

lb_msg.additem ( string(now(),"yyyy-mm-dd hh:mm:ss")+" 客户机端说:"+buf );

cb_send控件的Clicked事件

string buf ;

buf = sle_text.text;

ole_socket.object.senddata ( buf);

lb_msg.additem ( string(now(),"yyyy-mm-dd hh:mm:ss")+" 服务器端说:"+ buf);

3.1.2 创建客户端程序。

创建过程与创建服务器端相似,这里就不再重复。客户端程序的窗口界面如图2所示。

接下来为控件的事件写入以下代码:

Cb_connect事件的clicked事件

ole_socket.object.remotehost = em_host.text;

ole_socket.object.remoteport = integer ( em_port.text);

ole_socket.object.connect();

lb_msg.additem ( "己经和服务器端建立连接!" ) ;

Ole_socket控件的DataArriavl事件

string buf;

ole_socket.object.getdata ( ref buf ) ;

lb_msg.additem ( string(now(),"yyyy-mm-dd hh:mm:ss")+" 服务器端说:"+ buf);

cb_send控件的clicked事件

string buf;

buf = sle_text.text;

ole_socket.object.sendData ( buf) ;

lb_msg.additem ( string(now(),"yyyy-mm-dd hh:mm:ss")+" 客户机端说:"+buf ) ;

4 结论

PB是开发大型MIS及各类数据库跨平台应用的首选。从数据库前端工具来讲甚至远远超过了Oracle的Develop系列等专门的工具,从通用语言角度来讲功能也与VB等不相上下。但是多媒体和网络功能与其他工具相比较弱,该文针对这种情况,结合实际工作中的经验,讨论了如何在PB中通过使用Winsock控件增强网络功能,不足之处,敬请指正。

参考文献:

[1] Donahoo M J.TCP/IP Sockets编程(C语言实现)[M].陈宗斌,译.北京:清华大学出版社,2009.

[2] Iseminger D.网络连接服务开发人员参考库Windows Sockets和QOS[M].北京:机械工业出版社,2001(1).

[3] 蒋东兴.Windows Sockets 网络程序设计大全[M].北京:清华大学出版社,1999.

[4] 蒋东兴,林鄂华.Windows Sockets网络程序设计指南[M].北京:清华大学出版社,1995.

[5] 彭建.基于Sockets的桌面视频会议系统研究[D].长沙:中南大学,2002.

[6] Hatfield B.PowerBuilder 5 应用程序开发指南[M].史森,译.4版.北京:清华大学出版社,1997.

[7] 陈桂友.PowerBuilder数据库开发技术[M].北京:机械工业出版社,2009.

socket通信范文第2篇

关键词:网络通信;Tcp/IP;Socket

中图分类号:TP393 文献标识码:A 文章编号:1009-3044(2013)35-8116-02

1 C/S中TCP/IP与Socket

1.1 TCP/IP协议的优点

每种网络协议都有自己的优点,但是只有TCP/IP允许与Internet完全的连接。TCP/IP是在60年代由麻省理工学院开发的,即便网络遭到了大部分破坏,TCP/IP仍然能够维持有效的通信。在所有的OS中都集成了TCP/IP协议,TCP/IP是实现网际互联的基础,同时TCP/IP协议也具备了可扩展性和可靠性的需求。在现今的网络环境下,能有效地保证点对点信息的传输和安全是网络应用的需要。

1.2 Socket的作用

Socket通常称作"套接字",应用程序通常通过"套接字"向网络发出请求或应答网络请求,Socket是面向C/S模型而设计的,针对客户和服务器程序提供不同的socket系统调用。客户随机申请一个socket (相当于在电话系统中一个想打电话的人可以在任何一台入网电话上拨号呼叫),系统为任何有联网需求及信息需求的客户分配一个socket号;服务器拥有全局socket号 ,客户端socket号相当于电话系统中的各个公共电话,而服务器端相当于总机电话。

1.3 Socket实现网络通信的基本原理

TCP/IP系统中的端口号是一个16位的数字,它的范围是0~65535。客户和服务器必须事先约定所使用的端口。在C/S开发模式中,网络中的各个节点都有独有的IP地址用来表示各节点的身份,服务器预留端口作为链接的接口,而Socket通过在它们之间两两建立链路的方式,来实现网络中点对点的通信。

Socket分为客户端Socket对象及ServerSocket类对象,它们类库位于包中。ServerSocket用于服务器端,Socket是建立网络连接时使用的。在连接成功时,应用程序两端都会产生一个Socket实例,通过这个实例,完成所需的会话。对于一个网络连接来说,套接字是平等的,并没有差别,不因为在服务器端或在客户端而产生不同级别。不管是Socket还是ServerSocket它们的工作都是通过Java语言提供的SocketImpl接口及其方法来完成网络编程所需的网络通信功能。 这套API使Java程序员不用考虑复杂的网络协议以及底层的数据传输方式,而直接用面向对象的思想来实现网络传输。

2 建立C/S基于TCP/IP Socket通信模型

2.1 客户端Socket通信过程

Socket是网络上运行的两个程序间双向通信的一端,它既可以接受请求,也可以发送请求,利用它可以较为方便地编写网络上数据的传递。在Java中,利用Socket类的方法,就可以实现两台计算机之间的通信。客户端Socket通信整个过程主要有4个阶段:(1)请求阶段;(2)建立连接阶段;(3)通信阶段;(4)关闭阶段。

2.2 TCP Socket C/S模型及工作流程

TCP/IP本身是一个工业标准,在C/S模式中,主要通过三次握手,实现通信:

1):主机A发送位码为syn=1,随机产生seq number=1234567的数据包到服务器,主机B由SYN=1知道,A要求建立联机;

2):主机B收到请求后要确认联机信息,向A发送ack number=(主机A的seq+1),syn=1,ack=1,随机产生seq=7654321的包;

3):主机A收到后检查ack number是否正确,即第一次发送的seq number+1,以及位码ack是否为1,若正确,主机A会再发送ack number=(主机B的seq+1),ack=1,主机B收到后确认seq值与ack=1则连接建立成功;

图1 C/S程序工作流程图

3 程序实现

3.1 C/S模型下基本程序框架

3.1.1 客户端Socket的实现

客户端通过Socket连接服务器,主要过程经过4个阶段,具体代码如下:

Socket PersonalConnect=new Socket(“服务器IP”,PORT);

……;//socket、bufferedReader及PrintStream对象作为线程成员

PersonalConnect.close();

3.1.2 服务器端ServerSocket的实现

ServerSocket myTcpServer=new ServerSocket(PORT);//设定服务器端口

while(true){//实现多客户链接

Socket c_s=myTcpServer.accept();

……;//socket、bufferedReader及PrintStream对象作为线程成员

c_s.close();}

对于TCP C/S模式中两端的Java类中,主要有三个类成员它们分别是Socket对象、BufferedReader对象、PrintStream对象,而服务器端还有个ServerSocket对象。其中Socket及ServerSocket对象完成连接两端的请求绑定套接的过程,而输入输出流在套接中进行通信。如果一端要表达消息发送结束,则可以关闭其输出流,但并不关闭套接字对象,这就是“半关闭”的作用。

3.2 通过线程管理C/S中的通信

3.2.1 客户端ClientThread的实现

ClientThread.java的主要代码:

public class ClientThread implements Runnable{

……;

public ClientThread(Socket s) throws IOException{

this.personalConnect=s;

……;}

public void run() {……}

}

3.2.2服务器端ServerThread的实现

Tcp_Server.java文件的主要代码:

public static ArrayList socketList = new ArrayList();

//用来保存客户端Socket对象

ServerSocket myTcpServer=new ServerSocket(“服务器端口“);

Socket c_s = myTcpServer.accept();

socketList.add(c_s);//响应客户端Socket请求,并保存Socket对象进入socketList

new Thread(new ServerThread(c_s)).start(); ServerThread.java文件的主要代码:

public class ServerThread implements Runnable

{……;//socket、bufferedReader及PrintStream对象作为线程属性

public ServerThread(Socket s) throws IOException {

this.c_s = s; }}

利用线程在一个List结构中实现多个不同的Socket对象的管理即每一个客户端通过线程实现套接字对象的管理与通信。Accept()方法用于产生”阻塞”,直到接受到一个连接,并且返回一个客户端的Socket对象实例。”阻塞”是一个术语,它使程序运行暂时”停留”在这个地方,直到一个会话产生,然后程序继续。

为了更好地实现对于客户端对象的管理,实现对于其Socket与其消息的管理,我们也可以通过HaspMap对象,来实现单一客户K与其多条消息V的关系映射。实现“Kclient+Vserver“的形式传送消息即“用户名:消息类容”的形式输入,服务器端以HaspMap解析读入的消息对象,辨识消息的发送者与其消息之间的映射关系,实现点对点的消息传输。

4 结束语

本文主要介绍的内容仅适合于TCP/IP网络协议。Java Socket 可以实现TCP协议在两台计算机之间建立可靠连接。连接安全可靠,数据不会丢失,Java平台还提供了更安全的SSLSocket类,SSLSocket通信是对SOCKET通信的拓展。在Socket基础上添加了一层安全性保护,提供了更高的安全性,包括身份验证、数据加密以及完整性验证。其中身份验证用于数字证书的发放和应用。数据加密可以通过密钥防止消息传递过程中被别人监听而造成的损失。所以Socket编程在网络通信中得到了广泛的应用。

参考文献:

[1] Cay S.Horstman,Gray Cornell. Java2 核心技术[M].北京:机械工业出版社, 2006.

socket通信范文第3篇

【关键词】 SOCKET 编程 网络通信

计算机网络时代的到来推动了很多产业的发展升级,将计算机网络技术应用到各行各业中是当前的发展潮流。计算机的网络具有灵活性、开放性,网络本身不受企业或厂商的控制,所以在许多行业都能够发挥其价值。网络编程是应用网络发挥其价值的一个重要方式,而掌握SOCKET网络编程技术能够实现网络通信的效能。本文就BSD Unix网络版在套接字接口之上的网络通信过程展开了分析讨论。

一、TCP/IP协议在分层以及应用程序编程接口

基于TCP/IP的网络能够为应用程序供应两个常规编程接口,分别为套接字接口和传输层接口,套接字接口便是本文所重点讨论的SOCKET,SOCKET是在BSD Unix系统的基础上开发并普及开的,传输层接口(TLI)是AT&T公司开发出的,SOCKET API具有普遍的通用性,能够基于多种传输协议运行,当前已经发展成了网络编程的既定事实标准,所以本文就通用性只讨论套接字接口编程。

二、TCP/IP提供的服务以及编程模式

套接字实际上是IP地址在附上端口编号后,IP地址的标识网络中单一主机,端口编号的标识能够在主机之上展开工作的一个进程,能够系统化展开网间通信则需要建立在两个进程中,达成这一条件还需要共用相同的高层协议。

OSI术语里把网络层下面的各分层视为通信子网,为实现网间的进程通信,在此基A上还要做到控制差错、控制流量、管理各项连接、排序组合数据等功能,这就需要准备两种服务方式,分别为无连接的服务和面向连接(虚电路)。

TCP/IP网络应用中,进行通信工作的两个进程之间会互相产生作用和联系,为用户供应所需求的服务,然后将数据回复到客户的结果。

三、BSD Unix套接字接口网间进程的通信过程

SOCKET在TCP/IP基础上所能够提供的套接字类型主要有一下三种:

3.1流式套接字(SOCK STREAM)

流式套接字所提供的服务在连接上的应用比较多,能够为用户提供准确可靠的数据传输服务,并且保证了数据避免出错,同时还也能够避免多次重复发送,数据在传输过程中仍保持着队列顺序,对于数据还有准确的流量控制,防止了数据流超出限制值的出现。

3.2数据报式套接字(SOCK DGRAM)

数据报式套接字能够为用户提供无连接服务,独立的服务包传送出,对于错误没有保证,数据在传输的过程中可能会丢失或出现重复发送的现象,另一端接受到的数据也是杂乱无序的,数据长度有限制:最大为64KB,网络文件系统中(NFS)使用的便是数据报式套接字。

3.3原始式套接字(SOCK RAW)

原始式套接字的接口要求能够实现对底层协议间的信息传输,比如IP、ICMP的直接访问,这种访问常常用在对新的协议实现情况以及访问服务配置中的新设备的检验工作中,通常是不会为普通用户提供的,所以本文并未展开深入研究。

四、总结

本文针对以SOCKET在编程上的应用展开的了分析讨论,并对其在网络通信功能的应用进行了研究。网络编程是应用网络发挥其价值的一个重要方式,而掌握SOCKET网络编程技术能够实现网络通信的效能。本文就BSD Unix网络版在套接字接口之上的网络通信过程展开的研究仍不全面,需要更多的计算机网络技术人员投入,深入的研究并将其应用于网络通信领域。

参 考 文 献

[1]欧军,吴清秀,裴云,张洪. 基于socket的网络通信技术研究[J]. 网络安全技术与应用,2011,07:19-21.

[2]王远洋,周渊平,郭焕丽. Linux下基于socket多线程并发通信的实现[J]. 微计算机信息,2009,15:70-72.

[3]王志伟,沈杰峰,郭启峰,唐俊. 基于Socket的GPRS远程数据采集方法[J]. 西华大学学报(自然科学版),2006,01:37-39+93+3.

[4]张允刚,刘常春,刘伟,何付志. 基于Socket和多线程的远程监控系统[J]. 控制工程,2006,02:175-177.

socket通信范文第4篇

【关键词】Socket通信 无线 视频传输

在网络时代,网络通信贯穿于人们生活的方方面面。网络通讯工具的实现、浏览器的进程与web服务器的通信等等,均离不开Socket。Socket一词最早起源于Stephen Carr在1970年2月发表的论文,它通常被翻译为套接字,是存在于应用层和传输层之间的一个抽象层。服务器和客户端各自维护一个“文件”,在建立连接打开后,可以向自己文件写入内容供对方读取或者读取对方内容,通讯结束时关闭文件。

1 Socket通信流程

Socket是“打开―读/写―关闭”模式的实现,其通信流程如下:

(1)服务器根据地址类型(ipv4,ipv6)、Socket类型,协议创建Socket;

(2)服务器为Socket绑定IP地址和端口号;

(3)服务器Socket监听端口号请求,随时准备接收客户端发来的连接,这时服务器的Socket并没有被打开;

(4)客户端创建Socket;

(5)客户端打Socket,根据服务器IP地址和端口号试图连接服务器Socket;

(6)服务器Socket接收到客户端Socket请求,被动打开,开始接收客户端请求,直到客户端返回连接信息。这时Socket进入阻塞状态,所谓阻塞即accept()方法一直到客户端返回连接信息后才返回,开始接收下一个客户端谅解请求;

(7)客户端连接成功,向服务器发送连接状态信息;

(8)服务器accept方法返回,连接成功;

(9)客户端向Socket写入信息;

(10)服务器读取信息;

(11)客户端关闭;

(12)服务器端关闭。

2 建立Socket通信

Socket主要由客户端和服务端两部分构成,通过服务端与客户端建立通信后,由服务端向客户端发送相关的指令。

(1)在服务端,首先需要申请一个Socket,然后把它绑定到一个IP地址和一个端口,开启监听,等待客户端发来的接收连接。

(2)在客户端,也需应该申请一个Socket,然后连接到服务器的指定IP和端口。

(3)服务器端接收到连接请求后,产生一个新的Socket(端口大于1024)与客户端建立连接并进行通信,原监听Socket继续监听。

(4)需要注意一点的是负责通信的Socket是不能无限创建的,创建的数量和操作系统是有关系的。

3 基于Socket的无线视频传输

利用Socket和WiFi技术进行视频传输,需将捕获到的每帧图像进行转码,转成适合Socket传输的byte数组的形式,然后通过Socket通信,在客户端接收从服务端传送过来的视频,并进行实时显示。

(1)在服务端通过调用Marshal类的成员copy函数,把Image类型的图片的尺寸转换到byte数组中,然后发送通过Socket传输发送byte数组到客户端,这部分C#指令如下:

MIplImage mi = image.MIplImage;

byte[] buffer = new byte[mi.imageSize]; //dwBufSize数据长度

Marshal.Copy(mi.imageData, buffer, 0, mi.imageSize); //pBuffer IntPtr类型

Senddata(buffer); //发送图片数据

(2)在客户端通过Socket传输接收到来自服务端的数组byte数组,并通过格式转换,提取数据,还原成imageBox控件能够显示的Image类型,然后就能偶在客户端显示服务端接收到视频了。相关的格式转换代码如下:

//byte数组到IntPtr类型转换

IntPtr imgb =CvInvoke.cvCreateImageHeader(sz, Emgu.CV.CvEnum.IPL_DEPTH.IPL_DEPTH_8U, 3);

GCHandle pinnedArray = GCHandle.Alloc(MsgBuffer, GCHandleType.Pinned);

IntPtr pointer = pinnedArray.AddrOfPinnedObject();

CvInvoke.cvSetData(imgb, pointer, 1920);

pinnedArray.Free();

// IntPtr到IntPtr类型转换

Image image = new Image(sz);

CvInvoke.cvCopy(imgb, image.Ptr, IntPtr.Zero);

disImageBox.Image=image;

(3)调试成功后,打开服务端和客户端的运行程序,然后,点击服务端的Start Server按键,开启服务,在客户端点击点击连接,使服务端与客户端建立通信,然后在服务端点击Start Capture后,服务端会接收到本地摄像头的视频,客户端接收的画面与服务端一致,视频传输完成。

参考文献

[1]高伟,詹胜.基于Socket接口网络通信的实现[J].唐山师范学院学报,2008(05):19-20.

[2]张海深.关于视频编码压缩技术的探讨[J].数字技术与应用,2013(02):12-14.

作者简介

雷阳(1984-),男。博士学位。现为福建省计量科学研究院工程师。主要研究方向为流量计量测试技术及自动控制。

作者单位

1.福建省计量科学研究院 福建省福州市 350003

2.国家蒸汽流量计产品质量监督检验中心 福建省福州市 350003

socket通信范文第5篇

关键词:套接字;嵌入式Linux;网络通信;TCP/IP协议

中图分类号:G642.0 文献标志码:A 文章编号:1674-9324(2017)30-0274-02

一、引言

随着数字信息技术和网络技术的高速发展,嵌入式技术已经广泛应用到各个领域、各类产业以及人们的日常生活等各方面,成为引人瞩目的热点。为适应嵌入式和网络应用需求,标准的一种或多种网络通信接口成为嵌入式系统的必备需求,需要TCP/IP协议支持。而socket是TCP/IP网络最为通用的API,计算机可以通过这个端口与任何具有socket接口的设备通信。

二、socket简介

TCP/IP是一组支持网络通信的协议系统,其协议参考模型分4层:网络接口层、互联网层、传输层和应用层。网络通信中一个非常重要的概念就是套接字(socket),它是介于网络应用层和传输层之间的编程接口,在Linux网络层次模型中的位置如图1所示。套结字利用IP地址与端口号与Internet中的网络进程一一对应,进而实现网络通信。最常使用的socket有两种:(1)数据流式socket(SOCK-STREAM),使用TCP协议,提供面向连接的可靠通信流;(2)数据报式socket(SOCK-DGRAM),使用UDP协议,提供无连接的服务,并且不保证可靠、无差错。本文所使用的是流式套接字。

三、socket通信的设计与实现

1.socket通信过程。网络程序具备Client/Server结构。下面分TCP Client端及TCP Server端为说明TCP网络程序的流程,如图2所示。

Server端启动后,先调用socket()函数建立socket,其次通过bind()函数绑定socket和本地IP地址,然后调用listen()函数做好侦听准备,再调用accept()函数进行接收。Client端建立socket后,通过connect()函数和Server端建立连接。之后即可调用send()和recv()来实现发送和接收。关闭socket通过调用close()来实现。

2.socket通信的实现。本实验PC机上安装的是Redhat 9.0版本的Linux操作系统,嵌入式实验平台采用三星S3C2410微处理器,嵌入式操作系统内核版本为2.4.18。分别编写服务器端应用程序server.c和客户端应用程序client.c,实现网络通信,程序流程图如图3、图4所示。

四、结果分析

设置PC机和目标平台的IP地址分别为:192.168.1.20和192.168.1.22。PC机Linux终端和目标平台分别运行Server和client程序,通过超级终端观察到运行结果如图5所示,可见PC机与目标平台成功建立连接,实现通信,达到了预期目标。

五、结语

研究socket通信对开发具有网络功能的嵌入式产品有着非常重要的作用。本文的实现对于嵌入式产品的网络应用是一个很好的探索,对于同类系统的设计具有实际的参考和推广价值。嵌入式系统与网络的结合,必然使其具有更加广阔的应用空间。

参考文献:

[1]刘峥嵘.嵌入式Linux应用开发详解[M].北京:机械工业出版社,2004:394-433.

[2]吴明辉.基于ARM的嵌入式系统开发与应用[M].北京:人民邮电出版社,2004:187-197.

socket通信范文第6篇

关键词: Linux 环境; Socket ;网络通信

【分类号】TP316.81

1 引言

Linux是一个免费的类Unix操作系统,最初是由芬兰人Linus Torvalds于1991年开发。 Linux操作系统具有良好的稳定性以及强大的网络功能。Linux 系统平台被广泛应用到网络通信程序的开发中。网络通信编程要用到网络套接字(Socket)。Socket是一种描述符,它是网络通信的基本操作单元。数据传输是一种特殊的 I/O,提供了不同主机间的进程互相通信的端点,这些进程在通信前各自建立一个 Socket,并通过对Socket 的读写操作实现网络通信的功能。

socket通常也称作"套接字",应用程序通常通过"套接字"向网络发出请求或者应答网络请求。以J2SDK-1.3为例,Socket和ServerSocket类库位于java .net包中。ServerSocket用于服务器端,Socket是建立网络连接时使用的。在连接成功时,应用程序两端都会产生一个Socket实例,操作这个实例,完成所需的会话。对于一个网络连接来说,套接字是平等的,并没有差别,不因为在服务器端或在客户端而产生不同级别。不管是Socket还是ServerSocket它们的工作都是通过SocketImpl类及其子类完成的。

2 Socket 接口概述

当前的网络应用中, Client 或者 Server 这两种模式是进行通信的双方使用频率最高的交互模式,在通常情况下,监听或者连接分别是客户以及服务器模式所采用的实现方式。 借助服务器端的应用程序在一个端口可以对发送至服务器的请求进行监听,换句话说,一般情况下,服务器的进程始终是出于休眠状态的,除非有客户向该服务器发送了一个连接的请求,在服务器一个端口接收到来自于客户的请求时,服务器线程就会从休眠状态转为工作状态,根据客户的具体请求做出相应的反应,提供客户所需要的服务。

Socket 接口是使用标准系统文件描述符与其他程序进行通信的一种非常重要的方式。 它的工作方式是由一个套接字描述作为一个通信连接的端口,不同的端口之间可以通过套接字来完成信息的发送和接收。上文已经描述了 Linux 系统能够支持多种网络协议,而由于不同的协议其工作的方式和地址格式都不相同,而对于不同的网络协议而言,使用用一个网络地址的格式,就可以称之为一个协议地址族,表 1是Linux 支持的常见的网络协议地址族。

在 Linux 环境下,能够将套接字地址族抽象成一个统一的套接字 Socket 接口,在该接口的支持下能够完成应用程序的接口的开发。 具体的,在 Linux 环境下 的 Socket 接 口 主 要 有 如 下 几 种 : 1) SOCK_STREAM , 数 据 流 套 接 口 ; 2) SOCK_DGRAM ,数据报套接口; 3) SOCK_RAW ,原始套接口。

表 1 套接字地址族

3 Socket 网络通信模型

3.1 Linux 环境下基于 Socket 的网络通信模型

从目前来看,主流的网络通信模型主要有两种,其一是 C/S 架构及,客户端 / 服务端架构;其二是 B/S 架构,及浏览器 / 服务端架构。 本文研究的是客户端 / 服务端架构,在该架构下的 Socket 网络通信模型需要完成客户程序编写和服务程序编写。

客户端程序的编写步骤如下:创建 Socket 接口 与远程服务程序连接 读写数据 终止连接。

服务程序的编写步骤如下: 创建 Socket 接口 绑定 bind 接口 设置 Socket 接口为监听模式 接受请求 读写数据 终止连接。

3.2 Socket 函数的调用

通过设计客户机/服务器模式程序来进一步深入分析socket 通信原理。server.c 和 client.c 使用流套接字将服务器的信息传递给客户机。server.c为服务端的实现。首先创造建套接字,通信域为PF_INET,然后调用bind 函数将指定的端口等到信息与套接字关联起来,调用 listen 函数实现对指定端口的监听。当有连接请求时,通过调用accept函数建立与客户机的连接,最后调用 write 和 read 函数来与客户机进行信息交换。client.c为客户端程序,实现较为简单。首先调用connect 函数来连接指定的服务器和端口,然后通过write 函数和read函数来实现与服务器之间的通信。

使用gcc编译server.c和client.c, 获得可执行文件server和client。

[root@localhost src]#gcc server.c -o server

[root@localhost src]#gcc client.c -o client

先执行 server,然后运行 client。 ./server portnumber& (portnumber 随便取一个大于 1204 且不在/etc/services 中出现的号码 就用8888好了),然后运行 。

[root@localhost src]# ./server 10284

[1] 13583

[root@localhost src]# ./client localhost 1028

Server get connection from 127.0.0.1 I have received: Welcome to HNCST!

4 结束语

在 Linux 系统环境之下,应用程序要与下层协议完成通信,需要借助 Socket 接口,本文研究了 Socket 接口的基本理论,介绍了在 Linux 环境下的数据流套接口,数据报套接口以及原始套接口。 在此基础上文章介绍了 Linux 环境下的 Socket 网络通信模型,以客户端 / 服务端架构模型为例研究了该模型实现过程中的 Socket 函数的调用。 希望通过本文的研究能够为 Socket 接口在 Linux 系统环境下的网络通信程序的设计和实现提供一定的参考和借鉴。

参考文献:

[1] 戴缘生,孙苓生;一种基于嵌入式Internet的新型智能仪表的设计[J];电气应用;2005年03期.

[2] 吴涛 , 黄心汉 , 黄振宇 . 基于 Linux 的多移动机器人通信的原理与实现方法 [J]. 电工技术 ,2003(12).

[3] 李海林,王美琴,高振明;基于Linux的802.11b无线局域网数据包捕获方法[J];计算机应用研究;2004年12期.

socket通信范文第7篇

关键词:Linux环境;Socket;网络通信技术

中图分类号:TP316 文献标识码:A

随着网络通信日益为人们的日常生活所依赖,我们对于高性能的网络通信的要求也是越来越高。网络的工作状况对于一个操作系统来说就是最需要的基础性的支持,因此网络的支持程度就显得尤为重要。在现行众多的操作系统中,Linux操作系统有着较好的优势。Linux操作系统是一种可以进行多任务的操作系统,内核小、效率高。Linux操作系统本身还具有较高的安全性,这在网络通信方面是非常引人关注的一点,Linux操作系统还具有良好的兼容性,可以兼容大多数的网络协定,保障运行的效率。因为这些优势,Linux操作系统的应用度非常广泛,对于Linux操作系统的网络通信的研究也成为当下的一股热潮。Socket则作为Linux操作系统的唯一连接接口,对于高性能的网络通信程序开发有着很大的奠基作用。Socket即套接字,是一种连接应用层和传输层之间的编程接口,具有访问下层通信协议的功能,并且可以调用相应的数据。在这种情况之下,我们就要进行Linux环境下基于Socket的网络通信技术研究,希望可以设计出性能更高的网络通信技术。

1.基于SOCKET下的网络通信原理

现在的网络通信大多数都是由客户机和服务器构成的,即C/S架构,此外还有一种是由浏览器和服务端构成的,即B/S架构。这两种网络通信方式即是现在的网络通信的主流通信方式。这都是先通过了解客户需求,由子程序进行沟通和处理,而子程序则由主程序进行统一控制,以主程序为代表控制多个子程序来和客户进行通信。在网络通信中,Socket即套接字是非常重要的。在一个个网络进程运作的时候,我们都是通过对不同的进程进行标注,才可以加以区别。Socket就是一个个的网络进程的ID,只有我们明确了这些ID,我们才可以进行网络间的进程通信,把一个一个进程连接起来完成,从而完成我们需要的网络通信。我们的计算机现在已经越来越复杂,我们的计算机在进行运作的时候,一般都开启的不只是一个进程,对于这些进程的区分,我们就可以用Socket来完成。Socket除了可以担当ID的作用,还可以再进行细分,这样就会含有别的信息,即端口号。在计算机运行时,进程与端口号呈现一一对应的关系,这样能够避免出现运行误差,极大的提高网络通信的运行效率。Socket的网络协议还具有非常多的类型,工作方式也不尽相同,地址格式也不相同,相同的网络协议地址就可以用组成协议地址族,见表1。

对于这些套接字地址族,我们都是可以将其作为统一的套接字接口,可以被专有各地址族的软件所使用。有了这些前提,Socket下的ID和端口号的相互配合之下,我们的网络通信才可以得到实现。

2. LINUX网络通信设计

了解了Socket下的网络通信原理之后,我们就可以进行对Linux的网j通信设计了。对于Linux的网络通信设计,我们主要从工作流程、数据发送模块和数据接受模块3个方面来进行入手。

2.1 工作流程

对于Linux的网络通信进行设计,我们要先熟悉Linux的网络通信的通信流程。因此,我们要先从Socket开始。我们首先要做的就是建立起套接口,int socket=socket(intdomain,int type,int protocol);然后对建立的套接口进行绑定,给与建立的套接口一个地址,这个地址里包含有计算机的IP地址和端口号等一些基础信息,可以为套接口进行进程间的连接做好准备;客户端就可以请求连接网络,客户端会通过未被占用的端口来进行进程;在程序运行的时候,Socket会与相应的端口进行一对一的连接,并且会对连接的端口进行监听,以便在收到请求的时候及时地给予相应的处理;请求的队列过大会导致服务不会回应或是回应过慢,在队列减少则会尽快处理;处理完就可以将结果传输出去了,send和recv这两个函数可以完成对Socket进行数据传输;发送数据和接收数据,传输完毕之后,就可以关闭连接了。这样就可以完成整个客户访问的进程间的通信了。

2.2 数据发送模块

我们对于Linux操作系统中对于进程间的数据发送,是采用Socket函数来进行的。Int send和int recv这两个函数可以应用于套接字在进程间的通信。Send函数是用于发送数据的,如果出现了小于len的情况,就代表着数据有部分没有发送,只是发送了一部分,我们就需要再次发送来完成我们的数据发送。我们进程间的数据发送都是通过调用函数来进行的,通过函数来进行网络的连接,连接好了网络,我们才可以进行发送数据了。我们将数据顺利地发送出去之后,进程间才可以顺利地通信。

2.3 数据接收模块

我们有数据发送,当然也要有数据接收。当网络上的数据被计算机接收到了计算机,会产生一些控制器的中断,导致计算机运行出现故障。这个时候计算机的中断调控处理程序开始工作,对接收到的数据进行处理,相应地处理程序,寄存器开始工作,对接收的新数据进行记录及存储。我们在函数中要正确的设定寄存器的内容,不然我们的计算机将无法对新接收的数据进行处理。出现不同的函数时,代表的意义也是不一样的。我们就可以进行一些举例:当CPR二BNRY时,代表着缓冲区全部被存满,新接收的数据无法被使用;这时网卡将停止往内存写数据,新接收的数据将被抛弃,而无法存到我们的计算机里面;当CPR二BNR卜1时,表示网卡的接收缓冲区里没有数据,我们可以通过这个数据来判断是否有数据可以使用。

只有显示CPR!二BNRY十1时,才代表接收到了新的数据,并处于正常的存储状态,可以为我们所使用。

3. Socket网络通信模型

网络通信模型,最基础的是C/S的网络通信模型。对于这种网络通信模型,我们可以在这个网络通信模型中发现两个部分:客户程序和服务程序。我们的客户程序是由客户来进行提出请求,然后我们的服务程序开始工作,接收请求并建立连接,连接建立以后我们就可以让客户对于我们的网络通信中的数据建立起连接,客户就可以自行读取数据,进行使用。但是应用程序在使用Socket接口来读取数据之前,我们要先进行Socket函数的调用,有了Socket函数的支持,我们才可以完成通信间的连接,以此来完成整个客户程序的使用进程和服务进程的网络通信。网络通信的模型如图1所示。

结语

在这个网络发展迅速的时代,人们对于网络的要求也是越来越高,同时也带动了人们对高性能网络的开发和研究。Linux网络可以可以进行网络资源的共享,完成网络通信,而且具有较高的安全性。Linux网络还具有内核小,包含着很多的网络协议,还有开放的源代码,我们可以利用Linux网络进行基于Socket的网络通信技术的开发。Socket作为其中的接口起着举足轻重的作用,连接起了网络设备和应用程序与下层协定,从而完成设备和网络之间的网络通信。我们对于Linux环境下基于Socket的网络通信技g进行研究,希冀于提高网络通信效率,建立起更好的,性能更高的网络通信技术。

参考文献

[1]莫足琴,欧阳艳阶,马康.基于 Java Socket 多客户端并发通信聊天程序的设计与实现[J].电脑知识与技术,2008(20):63-65.

[2] Douglas. Comer, David L.Stevens. TCP/IP客户-服务器编程与应用[M].北京:清华大学出版社,2004.

[3]农孙博,范正刚. Linux平台下的Web编程[M].北京:人民邮电出版社,2000.

[4]刘春风,张代远.μC/OS-II下协议栈uIP的移植与应用[J].计算机技术与发展,2012,22(9):143-145.

socket通信范文第8篇

关键词:Java;Socket;ServerSocket;通信

一、 引言

随着计算机网络的快速发展,带动了Java语言的发展,Java越来越成为网络上广为流行的编程语言。Java是由Sun Microsystems公司于20世纪末推出的一门面向对象程序设计语言(简称Java语言)。用Java实现的支持Java applet的浏览器充分的展示出了Java的优势和魅力:跨各种操作系平台、实现动态的Web技术、安全的语言权限检查环境、JDK类库提供的丰富网络类库,易于实现网络编程的开发。Socket是Java网络编程的基础,本文就是从套接字的基本原理和使用方法出发,并通过一个简单网络通信例子,讲述在Java中使用Socket进行网络编程。[1]

二、Socket通信的基本原理

1.什么是Socket

Socket通常也称作“套接字”,当网络上有两个程序要进行会话的时候,就会通过一个端口发送请求或者应答命令,这个端口就是套接字。通常用Socket建立客户端和服务端的双向连接。在网络通信中Socket主要是基于TCP/IP协议标准,它是在TCP/IP协议中使用很广泛的一个编程界面,在通信过程中Socket的端口号和IP地址都是唯一确定的。

2.Socket的通信模式

Socket是基于C/S模式通信的,即面向客户/服务器模型设计。在客户端,使用套接字对特定网络位置的某一服务器端口发出请求连接,当连接成功后就会开始进行会话,然后才关闭端口。客户端的端口通常情况下是动态和随机分配的。在服务器端,我们首先需要监听端口,使用ServerSocket来指定需要进行通讯的端口,在客户请求道端口后成功后,服务器端进行连接,完成会话,在双方通讯完毕后,关闭连接。

在任何一个完善的Socket工作过程中,都要按照以下几个基本的步骤,才能建立正常的通信机制。首先创建一个Socket;然后进行连接请求道套接字的I/O流;再次依据通讯过程中采用的协议标准对套接字进行读或写的操作;最后完成会话并关闭Socket。

3.创建Socket

我们利用包中的两个类Socket和ServerSocket来分别建立到客户端和服务端的套接字连接。客户端程序使用Socket类建立到服务器的套接字连接。其构造方法如下:

public Socket():通过系统默认类型的SocketImpl创建未连接套接字。

public Socket(String host, int prot);连接到指定的主机和端口号。

Socket(InetAddress address, int port, boolean stream);连接到指定IP地址,主机端口和数据报方式的流。[2]

服务器端程序任务主要是监听,等待客户机连接,建立一个等待客户端连接的ServerSocket套接字。构造方法如下:

public ServerSocket(int port); 连接到的特定端口。public ServerSocket(int port, int backlog); 在声明构造方法时候,必须对创建的 Socket或ServerSocket捕获异常或抛出例外。

三、基于Socket的简单通信实现

服务端的程序:

public class ServerDemo{

public static void main(String args[]) {

try{

ServerSocket ser=null;

ser=new ServerSocket(8080);//在端口8080监听请求

Socket client=server.accept();//保存接受请求信息

System.out.println("IP:"+client.getInetAddress());

System.out.println("Port:"+client.getPort());

ser.close();//关闭Socket

}catch(IOException e) {

System.out.println("Error."+e);

}

}

}

以上程序是一个基于Socket的简单通信。

四、结语

这是一个简单的基于Socket的通信应用,展现了Socket实现网络编程的易实现性和其基本的通信原理,还有很多更深层的功能需要去挖掘,才能显示其强大的网络编程能力。

参考文献

[1] 王东.基于Java的系统网络编程[J].信息系统工程,2010,22(11):129-130;144.

socket通信范文第9篇

关键词:socket;TCP/IP协议;网络通信模式;并发响应

中图分类号:TP393.09

随着科学技术水平的不断快速提高,互联网的网络通信应用越来越广泛,已经成为人们日常生活中不可或缺的一部分,通过互联网络通信,人们彼此之间可以实现数据传输、信息共享等功能,从而提高现代人的生活质量。然而互联网的数据传输并不是漫无目的地随机传输,而是基于一定的通信协议和通信机制,TCP/IP通信协议以及Socket进程通信机制就是现代互联网络中常见的网络通信协议和通信机制。特别的,基于Socket的TCP/IP协议的网络通信模式是现代网络通信网络中常见的通讯模式,来实现服务器进程和客户端进行的相同通信,从而为互联网奠定了通信基础。所以对于基于Socket通信机制的TCP/IP网络通信模式的研究就有非常重要的现实意义,可以为我们对于网络设备的数据传输以及客户端服务器模型的构建打下坚实的基础。

1 TCP/IP通信协议以及Socket提供的编程接口

1.1 TCP/IP通信协议

一般的,互联网络通信模型有七个层次结构,分别为应用层,表示层,会话层,传输层,网络层,数据链路层以及物理层,而TCP/IP协议是应用在传输层和网络层的传输控制以及因特网的互联协议,用来规定网络设备如何接入到互联网以及设备之间的数据传输的标准。

在实际的互联网络中,当有两台计算机相互通信时,基于TCP/IP通信协议的要求,首先两台计算机要建立连接,然后进行数据通信。建立连接和数据传送的过程都是通过TCP/IP报文的形式发送的,首先发送计算机会将通信数据或者连接请求打包成TCP/IP报文的形式通过二者之间相连的互联网络电缆线以及路由网关等网络设备进行通信,而通信报文中会携带TCP/IP协议相关的识别字符串以及IP地址等在路由中进行选择,进而送至目标计算机。基于TCP/IP通信协议的报文格式如图1所示。

在互联网中发送的数据帧中,是包含各种协议的识别部分,其中TCP/IP协议的通信协议识别符就包含在数据帧中,并以图1.格式所示。每个数据帧中,去掉其他协议的头部识别数据,就可以得到TCP/IP协议的通信报文,该数据报文包括了IP协议的识别数据以及TCP协议的识别数据。通信报文中IP头数据包括了两台计算机的应用程式使用的IP协议版本以及IP头首部长度等等标示IP协议的信息,最重要的,包含了发送该条通信报文的源地址和目的地址,他们是以IP地址的二进制标示在数据报文中,通过该报文中的目的地址,通信数据就可以在互联网络中根据路由器中的路由列表来查找目的IP地址并自动选择路由,从而发送至目标计算机。同样的,将IP通信报文去除IP头数据后就可以得到TCP协议的通信报文,而TCP协议的头数据中,也包含了TCP通信的各种识别数据。在TCP协议头数据中包含了端口号、序列号、验证信息等内容,其中对通信来说比较重要的就是端口号数据,它包含了两台通信计算机的数据发送方的发送端口以及数据接收方的接收端口,从而使得这条TCP/IP通信报文在找到目标计算机后可以通过目的端口将该信息传送至应用程序,从而实现两台计算机的信息通信。所以对于两台计算机进行同时通信时,TCP/IP协议为发送的通信数据提供了通信识别符以及进行识别符,即目的IP地址和目的端口,通过识别符,通信数据就可以通过网络发送至目标计算机,从而实现互联网的通讯。

1.2 Socket

Socket是面向客户/服务器模型而设计的,针对客户与服务器程序之间的相互通信而提供的通信机制。Socket通常被称为“套接字”,通过Socket“套接字”的方式,计算机中的应用程序来向网络发送各种请求以及对网络的请求进行应答。Socket是独立于TCP/IP协议,工作在IP通信报文以及计算机应用层之间的网络编程接口,其中包含了流失套接字(SOCK_STREAM),数据包套接字(SOCK_DGRAM)以及原始套接字(SOCK_RAW)。流式套接字为应用层提供了一个面向连接的可靠的数据传输服务,可是使网络层的传输报文向应用层无差错、无重复地按照顺序接收;数据报套接字则提供了无连接服务,此时数据包可以独立的数据包进行发送而没有具体的保障措施;原始套接字则是为应用层提供了对IP、ICMP等网络协议的低层次的访问。

2 使用Socket实现TCP/IP网络通讯模式

由于TCP/IP通信协议的核心是在传输层、网络层以及物理接口层,但是他们只是向外提供了原始的不是直接的用户服务接口,开发者不可能直接编写TCP/IP协议头来发送具体的数据信息,而Socket则为TCP/IP通信协议提供了独立于协议的网络编程接口。通过Socket提供的网络编程接口,应用程式就可以通过Socket套接字接口来读取来自网络的IP通信报文,从而获取源计算机发送的数据信息,所以,可以根据TCP/IP协议和Socket来实现两台计算机的通信框架。

常见的请求响应的实现方案有两种,包括并发响应和重复响应。并发响应模型是处在等待状态的目标计算机在源计算机发送数据到达后通过产生子进程来响应源计算机请求而父进程继续等待请求,重复响应模型是维护请求列表并按照FIFO的原则对源计算机的请求进行处理。利用Socket创建并发响应模型时,首先创建新的Socket并将端口以及本地地址赋值给它,然后让Socket开始对端口进行监听,而此时,源计算机可以通过发送包含有目标计算机的IP地址和端口号的IP协议通信报文来向目标计算机发送请求,此时目标计算机的Socket就可以通过监听端口发现有请求到达,然后就可以产生新的Socket进行对源计算机发送的IP通信请求进行处理,而原有的Socket进行则继续对端口进行监听。重复响应的通信框架与并发响应通信框架不同的是在创建的Socket监听到端口有请求发送时会直接对请求处理而不会创建新的Socket进程,所以需要对源计算机的请求进行列表维护,来对所有监听到的请求进行相应。

总的来说,TCP/IP协议为传输数据提供了通信识别标示,这样通信数据可以在互联网中自动查询路由来到达目标计算机和目标端口,而Socket则对目标端口进行实时监听,当有发送数据到达时,Socket就可以将传输数据提供给应用层,从而实现两台计算机之间通过互联网络的通信。

参考文献

[1]刘骏,颜钢锋.基于Socket的网络编程技术及其实现[J].江南大学学报,2004(03).

[2]徐向东,周国祥,石雷.基于TCP/IP和Winsock文件上传的应用研究[J].合肥工业大学学报(自然科学版),2008(11).

[3]王静,曲凤娟.基于Socket的多用户并发通信的设计[J].福建电脑,2007(03).

[4]罗亚非.基于TCP的Socket多线程通信[J].电脑知识与科技,2009,03.

[5]胡柯,颉潭成,刘陆群.基于TCP/IP和Socket实现网络通信[J].组合机床与自动化加工技术,2003(09).

socket通信范文第10篇

关键词:socket Winsock 局域网 聊天室

中图分类号:G434 文献标识码:A 文章编号:1007-9416(2013)02-0134-02

1 前言

网络聊天已成为一种非常重要的交流方式,但大多都是基于Internet,通过公网进行交流存在信息安全隐患。开发自己的局域网通信工具成为一个理想的选择。基于Socket的局域网聊天室可以依托企业局域网提供一种良好、安全、快速的通信机制,其实现无需对企业原有的局域网部署进行改动,具有实现成本低廉、应用高效的优点。

2 实现的关键技术WinSock及其通信机制

2.1 关于WinSock

WinSock是由Sun Microsystems等几家公司联合制定的Windows下的Socket规范,已成为兼容当今流行操作系统的一种通用的网络编程接口。WinSock是一个基于Socket 模型的API,由Application、API和SPI组成。其中Winsock Application 指Windows 应用程序,Winsock API 指由Winsock 为用户提供的网络应用程序接口,Winsock SPI 指服务提供者接口层,即Winsock 的底层协议。[1]

2.2 基于Winsock的网络通信原理

利用Winsock 进行网络通信主要依赖于Windows 内部的消息传送机制,使用相关函数初始化、建立、配置和使用Socket。Winsock利用下层的网络通信协议及操作系统调用实际的通信功能,从而实现网络通信。以流式Socket为例介绍其工作过程。

服务器端:首先通过调用Socket()建立一个Socket对象;然后调用bind()函数将该Socket和本地网络地址联系在一起;再调用listen()函数使Socket做好侦听的准备;一旦Socket己建立,调用accept()函数等待一个连接,当一个请求到达时,accept()函数返回,服务器用交互或并发形式处理请求。

客户端:首先建立Socket对象,然后调用connect()函数和服务器建立连接;连接一旦建立,客户机和服务器之间就可以通过调用read()函数和write()数来发送和接收数据;最后,待数据传送结束时,调用close()函数关闭Socket。

3 聊天室系统工作流程设计及实现

3.1 系统工作流程

首先启动聊天室的服务端,然后启动客户端,设置登录信息连接服务器。进入聊天室后用户即可进行文字聊天。当用户发送信息后,服务器根据判断把收到的信息发送给在线用户。当用户进入、离开聊天室时,服务器会发送相应的消息通知。在线用户之间可以进行文件传输,在传输过程之中可以随时终止传输和添加新文件传输。

3.2 服务器端设计与实现

服务器端主要进行消息接受与转发,同时对关键数据进行显示,如:客户端连接与离开、消息转发、网络异常等。

服务器端首先建立Socket,然后绑定、监听Socket,如果有客户端进行连接请求,则返回当前所有在线用户信息,当客户端发送信息到服务端之后,由服务端对该消息进行转发,从而实现多人聊天。

3.2.1 创建监听SOCKET

if((Socket = WSASocket(AF_INET, SOCK_STREAM, 0,

NULL, 0,WSA_FLAG_OVERLAPPED)) == INVALID_SOCKET)

{

printf("WSASocket failed with error:%d\n",GetLastError());

return 0;

}

3.2.2 绑定地址

if (bind(SocketTemp, (PSOCKADDR) &InternetAddr, sizeof(InternetAddr)) == SOCKET_ERROR)

{

printf("bind() failed with error %d\n", WSAGetLastError());

return;

}

bind()函数的作用是将一个Socket和本地进程绑定。这样客户端才知道所要连接的是哪个地址和端口。

3.2.3 监听

if(listen(SocketTemp,5) == SOCKET_ERROR)

{

printf("listen() failed with error %d\n",WSAGetLastError());

return;

}

listen ()函数使服务器端的套接字进入监听状态,并设定可以建立的最大连接数。

3.2.4 服务器接受连接请求

if((Accepte=AAccept(Listen,(SOCKADDR*)&Socketclient,&len,NULL,0))== SOCKET_ERROR)

{

printf("WSAAccept() failed with error %d\n", WSAGetLastError());

return 0;

}

当没有连接请求时,就进入等待状态,直至有一个请求到达为止。Accept()在接收到连接请求之后,会为这个连接建立一个新的Socket来与对方通信,并把它作为返回值。

3.2.5 处理client发送的信息

创建好了服务器的处理线程之后,进行一个while(TRUE)的无限循环,用来读取与客户端通信的Socket上面的数据,首先判断Socket连接是否存在,如果Socket断开了,就把客户端离开消息发送给其他的客户端。若存在,根据端口上的数据类型进行处理:如果是接受消息(IO_RECV),则调用WSARecv读取Socket消息;如果是发送消息(IO_SEND),则判断消息类型,公聊消息就进行转发,私聊消息就把它发送给指定的接收者。[2]

3.3 客户端设计与实现

3.3.1 客户端程序设计

客户端主要是由CChatRoomApp、CChatRoomDlg、CCharRoomUi 3个类组成。CChatRoomApp完成窗口的注册和windows消息处理。CChatRoomDlg负责客户端的登陆界面,进行信息输入和发送。CChatRoomUi负责与其他用户进行文字聊天和文件传输,是客户端的核心类,所有主要功能都是在这个类中进行处理,包括Socket连接、数据处理、文件传输、服务器信息处理等。

3.3.2 向serve发送信息

客户端建立Socket的过程与服务端基本相同,但也有一些差异,如下:

服务器方:Socket()->bind()->listen->accept()->recv()/send()->close Socket()

客户端方:Socket()->connect()->send()/recv()->close Socket()

可以看到客户端不需要绑定端口和接收连接,与服务器端进行通信时也不需要使用多线程。

3.3.3 与其他客户端进行文件传输

在进行文件传输的时候,使用专门的Socket,而不是与服务器进行通信的Socket。[3]由于文件传输比文字传输更加复杂也占用更多的空间,这样既可以减轻服务端的压力,又使得文件传输效率更高。

4 结语

企业应用基于WinSock 的局域网聊天室进行通信,既可以保证信息安全,又大大减轻了文件服务器的负荷,增加了通信的灵活性。同时,基于Socket的局域网通信软件,不但可以满足传统的通信需求,而且也能扩展以适应新的网络应用,如网络教育,影音数据传输等,拥有广泛的应用前景。

参考文献

[1]周红进等.基于WinSock 的网络通信模块开发[J].电脑开发与应用,2003,16(10):4-5.

[2]曾松等.多线程局域网聊天程序的设计与实现[J].软件导刊,2008(2):71- 72.

上一篇:无线通信技术范文 下一篇:异步通信范文