本刊简介   |    联系我们   |   

基于 TCP 的 Socket 网络编程

2021-01-12 13:40:31

 [摘要]“一切皆Socket”,当今网络编程离不开Socket。基于Socket的重要性,对其的概念进行了阐释,并就服务器和客户端的基本编程思想加以论述,最后通过一个具体实例来解读如何区分不同连接。

[关键词]Socket;TCP;编程

当今网络通信成为人们不可或缺的一部分,无论是访问网页、微信聊天还是发送邮件都需要与相应的服务器建立连接才能发送数据。而连接的建立都需要Socket。什么是Socket,如何使用Socket建立连接,如何区分服务器上的连接为本文讨论的重点。

1Socket简介

IPTCP作为TCP/IP协议中最重要的两个协议,在运输层将应用层向下传送的数据添加首部后送到网络层,再在网络层添加首部后封装为一个IP数据报。通过网络层将数据报由一台主机搬运到另一台主机的过程是不可靠的,经常会发生数据的丢失、失序及重复。而运输层TCP协议使用错误重传机制实现两台主机应用进程间的可靠通信。每台主机上可以运行多个不同的应用进程,为区分不同进程而设置不同的端口号,在运输层通过识别不同的端口号就可以将数据报交付给不同的进程。套接字(Socket)是基于TCP/IP网络能为上层提供的编程接口。Socket可以抽象为插座,应用进程抽象为插头,一旦插头插进插座,就建立了链接。以此实现多路复用。

2Socket服务器与客户端的编程

服务器在通信过程中是被动的,在启动后需要实时监听客户端发来的连接请求。编程过程及伪代码如下:创建套接字listenfd=socket(...);将创建的套接字与本地地址和某个端口绑定bind(listenfd,本机IP和熟知端口FTP21,...);设置为监听模式以接收客户端的请求listen(listenfd,...);收到客户端请求后接受连接请求connfd=accept(listenfd,...);TCP连接下进行数据的发送send(connfd,...);与接收receive(connfd,...);关闭套接字close(listedfd);对客户端编程过程及伪代码如下:创建套接字clientfd=socket(...);向服务器发起链接connect(clientfd,服务器IP和端口,...);链接成功后便可向服务器发送数据send(clientfd,数据);或接收来自服务器的数据receive(clientfd,...);关闭套接字close(clientfd)

3区分不同连接

通常情况下一个服务器需要连接多个客户端,要想将这些客户端区分出来,就需要多个socket来表示。考虑以下情况,Socket代表二元组(IP,port),如果服务器中已经建立一个listenfdSocket,端口号为21。每次客户端发起连接请求都要创新一个新的connfd,但21号端口已经被占用,服务器端是否应创建新的端口号?其实新创建的connfd没有使用新的端口号,服务器的IP地址和端口号是相同的,而客户端的IP和端口号不同以区分不同的连接。

【参考文献】

[1] 蒋达.基于Socket的网络接口编程[J].办公自动化,2018,23(23):29-30+32.

[2] 严谦,阳泳.网络编程tcp/ip协议与socket论述[J].电子世界,2016(08):68+70.

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

本文摘自科技经济导刊杂志。

基于 TCP 的 Socket 网络编程

主管单位:山东省科学技术协会

主办单位:中国科协科普部;山东省科协

国际刊号:ISSN2096-1995

国内刊号:CN37-1508/N

刊期:旬刊

开本:大16开

语种:中文

发行:全国公开

曾用刊名:科技致富向导

地址:山东省济南市济大路17号

投稿邮箱:kjjfxd@163.com

注:本网站为投稿平台,非杂志社官网