首页 > 编程知识 正文

socket两种套接字,tcp/ip网络编程项目式教程

时间:2023-05-06 08:25:42 阅读:156264 作者:500

套接字编程:网络APP应用的生成成本实验是《计算机网络 自顶向下方法》中的编程练习,通过编程实现可以更好地理解计算机如何实现连接和数据发送。

套接字是APP应用层与TCP/IP协议系列进行通信的中间软件抽象层,是一组接口。 在设计模式下,套接字实际上是门模式,将复杂的TCP/IP协议族隐藏在套接字接口的后面,对用户来说,所有的简单接口都是为了使套接字符合指定的协议而数据

1、UDP socket编程基本上说明了在不同机器上运行的过程是通过向彼此的socket发送消息来进行通信的。 如果使用UDP,则必须首先将目标地址附加到组。 收件人的地址是什么? 由目标主机的IP地址和目标套接字端口号组成。

实现如下客户服务器应用程序:

)客户机从该键盘读取一行文字(数据),向服务器发送该数据。

)2)服务器接受该数据,并将这些字符转换成大写。

)3)服务器将修改后的数据发送到客户端。

)4)客户接收修改后的数据,并在其监视器上显示该行。

代码由于代码进行了详细的注释,窗口较小不便观察。可以复制出来进行理解分析。

客户端程序UDPClient.py创建UDP套接字,用户输入小写字母字符串,将其发送到指定的服务器地址和相应的端口,等待服务器返回消息,然后显示消息。

服务器端程序TCPServer.py维护可连接的UDP套接字,在收到字符串后将其更改为大写,并将更改后的字符串返回给客户端。

UDPClient.py

导入实现fromsocketimport*#socket套接字的程序包serverName='191.101.232.165' #的服务器地址,以便可以使用远程服务器。 也可以选择其他计算机作为服务器。 现在,需要输入另一台计算机的IP地址serverPort=12000 #服务器指定的端口clientsocket=socket(af_inet,SOCK_DGRAM )以创建UDP套接字第一个参数表示地址簇,af );第二个参数表示UDP套接字。 值得注意的是,客户没有指定套接字端口号,操作系统将执行此操作。 使用,操作进程message=input (inputlowercasesentence : ) ) #创建内置函数用户输入信息(clientsocket.sendto ),message ) 此外,源地址也会附加到组中。 这是自动完成的,不需要显式在代码中完成。 在发送包之后,等待从服务器接收数据修改后的消息,服务器地址=client socket.recvfrom (2048 )从服务器接收信息,并同时获取服务器地址。 分组数据放置在修改后的消息中,源地址放置在变量serverAddress中。 这包括IP和端口号。 (打印)修改的消息. decode ) )显示从服务器返回的信息。 clientSocket.close ) )关闭套接字

fromsocketimport * server port=12000 #服务器指定的端口serversocket=socket(af_inet, SOCK_DGRAM )创建UDP套接字并使用IPv4协议serversocket的serverport(#以前指定套接字的端口打印) while client address=server socket.recvfrom (2048 ) #接收来自客户端的消息,地址modifiedMessage=message.upper ) # 获取并将来自客户端的字符串更改为大写serversocket.send的clientaddress(#使用已获取的客户端地址将更改后的字符串发送回客户端执行结果。 首先,在一台计算机上启动服务器程序,然后在另一台计算机上启动客户端程序。 执行效果如下。

UDPServer .py

服务器端:

2、TCP套接字编程的基本说明与UDP不同,TCP是面向连接的协议。 提供端到端的可靠传输。 这意味着在客户端和服务器端可以发送数据之前,必须进行三次握手(即众所周知的三次握手)以创建TCP连接。 因此,创建TCP连接时,必须将客户端套接字地址与服务器套接字地址相关联。 发送数据时,只需通过套接字将数据放入TCP连接中。 u和

DP不同,UDP在将分组放入套接字之前必须为其附上一个目的地址。

在三次握手期间,客户进程先敲服务器进程的欢迎之门。当服务器收到信息后会生成一个新的套接字,专门用于特定的客户。然后对应专门的客户进行连接会生成新的套接字,称为连接套接字。

欢迎套接字:所有要与服务器通信的客户的起始接触点。

连接套接字:随后为了每个客户通信而生成的套接字。

实现如下客户–服务器应用程序的流程图:

代码

客户端程序TCPClient.py创建一个TCP套接字,然后向指定服务器地址和端口发起连接,等待服务器连接后,再将用户输入的字符串通过套接字发送,其后将服务器返回的消息显示出来。

服务端程序TCPServer.py一直保持一个TCP欢迎套接字,可接收任何客户端的连接请求。在接收到客户端的连接请求后,创建一个新的TCP连接套接字用于单独与该客户通信,同时显示客户端地址和端口。在接收到客户端发来的字符串后,将其改为大写,然后向客户端返回修改后的字符串。 最后,关闭TCP连接套接字。

TCPClient.py from socket import *serverName = '191.101.232.165' # 指定服务器地址serverPort = 12000clientSocket = socket(AF_INET, SOCK_STREAM) # 建立TCP套接字,使用IPv4协议,第二参数为类型声明,和上面UDP套接字不同; # 创建客户套接字时没有指定 端口号,操作系统进行该操作clientSocket.connect((serverName,serverPort)) # 向服务器发起连接,先进行三次握手,然后建立TCP连接;# 注意和UDP方式对比:UDP直接分组然后发送(sendto)sentence = input('Input lowercase sentence:').encode() # 用户输入信息,并编码以便发送clientSocket.send(sentence) # 将信息发送到服务器modifiedSentence = clientSocket.recvfrom(1024) # 从服务器接收信息print(modifiedSentence[0].decode()) # 显示信息clientSocket.close() # 关闭套接字

TCPServer .py

from socket import *serverPort = 12000serverSocket = socket(AF_INET, SOCK_STREAM) # 创建TCP欢迎套接字,使用IPv4协议serverSocket.bind(('',serverPort)) # 将TCP欢迎套接字绑定到指定端口,等待并聆听客户敲门serverSocket.listen(1) # 定义最大连接数,至少为1print("The server in ready to receive")while True:connectionSocket, addr = serverSocket.accept() # 接收到客户连接请求后,调用accept()方法,创建新的TCP连接套接字,由这个客户专用;进行握手后建立一个TCP连接print('Accept new connection from %s:%s...' % addr)sentence = connectionSocket.recv(1024) # 获取客户发送的字符串capitalizedSentence = sentence.upper() # 将字符串改为大写connectionSocket.send(capitalizedSentence) # 向用户发送修改后的字符串connectionSocket.close() # 关闭TCP连接套接字 运行效果

先在一台机器上启动服务器程序,然后在另一台机器上启动客户端程序。运行效果如下:

服务器端:

客户端:

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。