socket服务器和客户端的建立步骤。Python实现

来源:互联网 发布:加入snh48好吗 知乎 编辑:程序博客网 时间:2024/06/04 19:05

TCP-服务端
1、创建一个socket,用函数socket();
2、绑定IP地址、端口等信息到socket上,用函数bind();
3、开启监听,用函数listen();
4、接收客户端上来的连接,用函数accept();
5、收发数据,用函数send()和recv(),或者read()和write();
6、关闭网络连接;
7、关闭监听;

from socket import *from time import ctimeHOST = 'localhost'PORT = 21567BUFSIZ =1024ADDR = (HOST , PORT)tcpserSock = socket(AF_INET,SOCK_STREAM)#1 SOCK_STREAM 流式-forTCPtcpserSock.bind(ADDR)#2tcpserSock.listen(5)#3while True:    print ('waiting for connection...')    tcpCliSock, addr = tcpserSock.accept()#4    print ('...connected from:',addr)    while True:        data = tcpCliSock.recv(BUFSIZ)#5        if not data:            break        tcpCliSock.send('[%s]%s' %(ctime(),data))    tcpCliSock.close()#6tcpserSock.close()#7

TCP-客户端

1、创建一个socket,用函数socket();
2、绑定IP地址、端口等信息到socket上,用函数bind();* 可选
3、设置要连接的对方的IP地址和端口等属性;
4、连接服务器,用函数connect();
5、收发数据,用函数send()和recv(),或者read()和write();
6、关闭网络连接;

from socket import *from time import ctimeHOST = '192.168.0.104'#目的IP地址PORT = 21567BUFSIZ = 1024ADDR = (HOST, PORT)tcpCliSock = socket(AF_INET,SOCK_STREAM)tcpCliSock.connect(ADDR)while True:    data = raw_input('>')    if not data:        break    tcpCliSock.send(data)    data = tcpCliSock.recv(BUFSIZ)    if not data:        break    print (data)tcpCliSock.close()

UDP-服务器
1、创建一个socket,用函数socket();
2、绑定IP地址、端口等信息到socket上,用函数bind();
3、循环接收数据,用函数recvfrom();
4、关闭网络连接;

#-*-coding:utf-8-*-from socket import *from time import ctimeHOST = ''PORT = 21567BUFSIZ = 1024ADDR = (HOST,PORT)udpSerSock = socket(AF_INET,SOCK_DGRAM)udpSerSock.bind(ADDR)while True:    print ('waiting for message...')    data,addr = udpSerSock.recvfrom(BUFSIZ)    udpSerSock.sendto('[%s]%s' %(ctime(),data),addr)    print ('...received from and returned to:',addr)udpSerSock.close()

UDP-客户端
1、创建一个socket,用函数socket();
2、绑定IP地址、端口等信息到socket上,用函数bind();* 可选
3、设置对方的IP地址和端口等属性;
4、发送数据,用函数sendto();
5、关闭网络连接;

from socket import *HOST = 'localhost'PORT = 21567BUFSIZ = 1024   ADDR = (HOST,PORT)udpCliSock = socket(AF_INET,SOCK_DGRAM)while True:    data = raw_input('>')    if not data:        break    udpCliSock.sendto(data,ADDR)    data,ADDR = udpCliSock.recvfrom(BUFSIZ)    if not data:        break    print dataudpCliSock.close()

socket流程只能怪listen和accept哪个是带阻塞的,什么情况下阻塞
listen意思是监听:但是它不是一直在监听,accept才是;
理解:listen函数不会阻塞,它只是相当于把socket的属性更改为被动连接,可以接收其他进程的连接。listen侦听的过程并不是一直阻塞,直到有客户端请求连接才会返回,它只是设置好socket的属性之后就会返回。监听的过程实质由操作系统完成。但是accept会阻塞(也可以设置为非阻塞),如果listen的套接字对应的连接请求队列为空(没有客户端连接请求),它会一直阻塞等待。