TCP、UDP套接字编程(简单客户/服务器实现)

来源:互联网 发布:ubuntu添加用户到sudo 编辑:程序博客网 时间:2024/05/17 08:00

0.简介

程序使用Python编写,客户端和服务器端均在一台主机上完成并试验成功,效果为客户端向服务器端发送一串小写字母,然后服务器端返回一串对应的大写字母.

1. TCP套接字编程

TCP是一个面向连接的服务,提供了可靠地数据传输,当客户端向服务器端使用TCP发送分组的时候,客户和服务器先要握手并创建一个TCP连接,TCP一端和客户套接字相连,一端和服务器套接字相连,创建TCP 连接的时候,我们将客户的套接字地址(IP地址、端口号)和服务器的套接字地址(IP地址、端口号)与其相关联,当发送数据的时候,只需要将数据经过套接字丢给TCP连接即可.其中服务器有两种套接字:欢迎套接字和连接套接字,当客户要与服务器建立一个TCP连接的时候(三次握手),欢迎套接字进行接收,然后创建一个新的连接套接字和该客户进行数据传输,该连接专属于此客户.

  • 服务器端
from socket import *serverPort = 12000 #设置端口号为12000serverSocket = socket(AF_INET,SOCK_STREAM) #创建TCP套接字(欢迎套接字)serverSocket.bind(('',serverPort)) #将服务器的端口号和该套接字关联起来serverSocket.listen(1) #服务器聆听来自客户端的TCP连接请求,参数为最大连接数print('the server is ready') #提示文字while 1:    connectionSocket, addr = serverSocket.accept() #接收到TCP连接请求,创建一个新的TCP套接字,为特定客户专用    sentence = connectionSocket.recv(1204) #接受客户端发送的字符串字节    capitalizedSentence = sentence.upper() #字符串转换操作    connectionSocket.send(capitalizedSentence) #将字符串字节发送    connectionSocket.close() #关闭TCP套接字连接
  • 客户端
from socket import *serverName = 'hostname' #此处填写IP地址serverPort = 12000  # 端口号clientSocket = socket(AF_INET,SOCK_STREAM) # 参数一:指示底层网络使用的是IPV4,参数二指示该套接字是一个TCP套接字clientSocket.connect((serverName,serverPort)) # 发起客户到服务器的TCP连接,参数为服务器端的地址,开始执行三次握手,并建立TCP连接sentence = raw_input ( 'input lowercase sentence:' )  # 收集字符,直到输入回车clientSocket.send ( sentence )  # 将字符串中的字节放入到TCP连接中modifiedSentence = clientSocket.recv ( 1024 )  # 客户等待接受服务器返回的字节,1024为缓存长度print modifiedSentence  # 输出返回的字符串字节clientSocket.close ()  # 关闭套接字,即关闭此TCP连接

2.UDP套接字编程

UDP不是面向连接的服务,不提供可靠地数据传输服务,当使用UDP发送分组的时候,需要先将目的地址附在分组上,目的地址包括目的主机的IP地址和目的地套接字的端口号

  • 服务器端
from socket import *serverPort = 12000serverSocket = socket(AF_INET, SOCK_DGRAM)serverSocket.bind(('', serverPort)) #将端口号和服务器绑定print "The server is ready"while 1:    message, clientAddress = serverSocket.recvfrom(2048)    newMessage = message.upper()    serverSocket.sendto(newMessage, clientAddress)
  • 客户端
from socket import  *serverName = 'hostname' #此处填写IP地址serverPort = 12000clientSocket = socket(AF_INET, SOCK_DGRAM)message = raw_input('please input lowercase sentence:')clientSocket.sendto(message, (serverName, serverPort)) #附上目的地址并发送newMessage, serverAddress = clientSocket.recvfrom(2048)print newMessageclientSocket.close()

3.实现效果

  • 服务器端
  • 客户端
0 0