pythonsocket网络编程实验报告Word文件下载.docx
《pythonsocket网络编程实验报告Word文件下载.docx》由会员分享,可在线阅读,更多相关《pythonsocket网络编程实验报告Word文件下载.docx(11页珍藏版)》请在冰豆网上搜索。
如果端口号正在被使用或者保留,或者主机名或ip地址错误,则引发socke.error异常。
3.绑定后,必须准备好套接字,以便接受连接请求。
socket.listen(backlog)
backlog指定了最多连接数,至少为1,接到连接请求后,这些请求必须排队,如果队列已满,则拒绝请求。
4.服务器套接字通过socket的accept方法等待客户请求一个连接:
connection,address=socket.accept()
调用accept方法时,socket会进入'
waiting'
〔或阻塞〕状态。
客户请求连接时,方法建立连接并返回服务器。
accept方法返回一个含有俩个元素的元组,形如(connection,address)。
第一个元素〔connection〕是新的socket对象,服务器通过它与客户通信;
第二个元素〔address〕是客户的internet地址。
5.处理阶段,服务器和客户通过send和recv方法通信〔传输数据〕。
服务器调用send,并采用字符串形式向客户发送信息。
send方法返回已发送的字符个数。
服务器使用recv方法从客户接受信息。
调用recv时,必须指定一个整数来控制本次调用所接受的最大数据量。
recv方法在接受数据时会进入'
blocket'
状态,最后返回一个字符串,用它来表示收到的数据。
如果发送的量超过recv所允许,数据会被截断。
多余的数据将缓冲于接受端。
以后调用recv时,多余的数据会从缓冲区删除。
6.传输结束,服务器调用socket的close方法以关闭连接。
〔二〕、建立一个TCP客户端连接则需要4个步骤:
1.创建一个socket以连接服务器socket=socket.socket(family,type)
2.使用socket的connect方法连接服务器socket.connect((host,port))
3.客户和服务器通过send和recv方法通信。
4.结束后,客户通过调用socket的close方法来关闭连接。
二,建立TCP连接
首先建立服务器程序。
创建套接字,绑定套接字,开始监听,就是一个while循环一直监听有没有消息连接。
客户端程序
创建套接字,连接,等待输入,发送。
同一台电脑结果在两个shell中演示。
局域网内交互测试信息:
作为服务器,来自IP地址为:
192.168.1.101客户端的消息。
三,建立UDP连接
UDP的建立过程基本和TCP一样,看以下代码异同,这里不在熬述。
建立服务器程序
创建套接字,开始监听,就是一个while循环一直监听有没有消息连接。
建立客户端程序
创建套接字,while循环一直监听有没有消息连接。
两个shell中演示显示数据传送
局域网内的信息交互:
作为服务器,来自IP地址为192.168.1.101的消息。
作为客户端,向IP地址为192.168.1.101的服务器发送消息。
总结:
一般的TCP和UDP连接服务器和客户端的内容和步骤。
TCP服务器端:
1创建套接字,绑定套接字到当地地址,然后开始监听连接。
就是socket,bind,listen。
2进入循环,不断接受客户端的连接请求,然后接收传来的数据,当然也可以发送给对方数据。
就是accept一个连接,然后recv数据。
3接收完毕可以关闭套接字,close。
这个过程的伪代码如下:
ss=socket()#创建服务器套接字
ss.bind()#把本地地址绑到套接字上
ss.listen()#监听连接
inf_loop:
#服务器无限循环
cs=ss.accept()#接受客户端的连接
comm._loop:
#通信循环
cs.recv()/cs.send()#对话
cs.close()#关闭客户套接字
ss.close()#关闭服务器套接字
TCP客户端:
1创建套接字,然后连接远端地址,socket,connect。
2建立连接之后开始发送数据。
Send〔data〕,当然可以从缓冲区读取服务器发来的数据。
Recv〔BUFF〕
3完毕后,关闭套接字。
Close
伪代码如下:
cs=socket()#创建客户套接字
cs.connect()#尝试连接服务器
cs.send()/cs.recv()#对话
cs.close()#关闭套接字
UDP服务器端:
1创建套接字,并绑定到当地地址socket,bing
2直接接收数据从buffer。
Recvfrom〔〕,这个函数接受到数据,和sender的地址〔主机号,端口号〕,当然也可以发送数据到客户端,用sendto〔data,addr〕
3关闭套接字close〔〕
伪代码:
Ss=socket()#创建套接字
ss.bind()#绑定
#无限循环
ss.recvfrom()/sendto()#对话
ss.close()#关闭套接字
UDP客户端:
1创建套接字,socket
2进入循环,发送接收数据sendto,recvfrom
Cs=socket()#创建
Comm_loop:
#循环接收发送
Cs.sendto()/recvfrom()#对话
Cs.close()#关闭
Send〔〕sendto〔〕recv〔〕recvfrom〔〕
我们发现在TCP连接中我们发生接收数据都是用的send〔〕和recv〔〕方法,而在UDP中用的sendto〔〕和recvfrom〔〕。
这两对方法实现的作用差不多,但是参数有所不同,
TCP中,send〔data〕和recv〔buffer〕,因为在TCP中,传输数据之前连接已经建立,也就是说我们知道给谁发,或者收谁的数据。
而在UDP中用,recvfrom〔buffer〕和sendto〔data,addr〕,recvfrom可以接受到sender的addr,然后发送时,根据addr发送。
因为UDP不是面向连接的,所以我们必须知道这个数据要发给谁,它的地址什么。
四,UDP广播
1,工作原理
在UDP广播通讯模式下,一个单独的数据包拷贝发送给网络上所有主机。
当不能明确具体的服务器,而又要求该服务时,UDP广播提供了传输不区分种类的消息的便捷方式。
在多数情况下UDP广播仅仅作为本地网络通信形式。
受限的广播地址是255.255.255.255。
该地址用于主机配置过程中IP数据报的目的地址,此时,主机可能还不知道它所在网络的网络掩码,甚至连它的IP地址也不知道。
在任何情况下,路由器都不转发目的地址为受限广播地址的数据报,这样的数据报仅出现在本地网络中。
已知网络主机的IP地址和子网掩码,可以算得指向主机所在子网的广播。
子网广播地址=〔主机IP〕“或”〔子网掩码取反〕。
2,拓扑结构