python网络编程
/*×××××××××××××××××××××××××
创建一个能接受客户端的消息,
在消息前加一个时间戳后返回的tcp服务器
×××××××××××××××××××××××××*/
#!/usr/bin/env python
from socket import *
from time import ctime
HOST=''
PORT=21567
BUFSIZ = 1024
ADDR = (HOST, PORT)
tcpSerSock = socket(AF_INET, SOCK_STREAM)
tcpSerSock.setsockopt(SOL_SOCKET, SO_REUSEADDR, True)
tcpSerSock.setsockopt(SOL_SOCKET, SO_REUSEPORT, True)
tcpSerSock.bind(ADDR)
tcpSerSock.listen(5)
while True:
print'waiting for connect ...'
tcpCliSock, addr = tcpSerSock.accept()
print'... connected from :' ,addr
while True:
data = tcpCliSock.recv(BUFSIZ)
if not data:
break
tcpCliSock.send('[%s] %s'%(ctime(), data))
tcpCliSock.close()
tcpSerSock.close()
在进入到服务器无限循环后,被动的等待连接,当有连接的时候,我们进入对话循环,等待客户端发送数据,如果消息为空,表示客户端已经退出,那就再去等待下一个客户端连接,得到客户端消息后,我们要在消息前加一个时间戳然后返回,最后一行不会被执行,放在这里是提醒,服务器退出的时候记得调用close()函数
/*×××××××××××××××××××××××××
创建一个tcp客户端,
程序会提示用户输入要传给服务器的信息,
显示服务器返回的加了时间戳的结果
×××××××××××××××××××××××××*/
#!/usr/bin/env python
from socket import *
HOST= 'localhost'
PORT=21567
BUFSIZ = 1024
ADDR = (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()
客户端有一个无限循环,用户没有输入或者服务器由于某种原因退出的时候,导致函数recv()失败,在一般情况下,客户端会把用户输入的字符发送给服务器进行处理,然后接收并显示服务器传回来的加了时间戳的字符串
/*×××××××××××××××××××××××
×创建一个udp的服务器和客户端
×××××××××××××××××××××××××*/
#!/usr/bin/env python
from socket import *
from time import ctime
HOST = ''
PORT = 21567
BUFSIZ = 1024
ADDR = (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()
#!/usr/bin/env python
from socket import *
HOST = 'localhost'
PORT = 21567
BUFSIZ = 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 data
udpCliSock.close()
UDP和TCP服务器的区别,由于数据报套接字是无连接的,所以无法吧客户端连接交给另外的套接字进行后续的通讯,这些服务器只是接受消息,需要的话,给客户端返回一个结果就可以的
UDP和TCP客户端的区别,我们不用先去和UDP服务器建立连接,而是直接把消息发出去,等待服务器的回复,得到了加了时间戳的字符串以后,把他显示出来,然后再继续其他消息,在输入结束后,退出循环,关闭套接字
来源:https://www.cnblogs.com/kaylee-lr/p/5710477.html