实验环境:python2
一、TCP编程
1.建立TCP服务器
①创建TCPServer.py文件
②编写服务器代码
1)创建socket对象,调用socket构造函数
2)绑定ip端口(IP号和端口号)
3)设置最大连接数(准备套接字,以便接受连接请求)
4)使用socket的accept()方法等待客户请求一个链接
5)获取客户请求数据
6)关闭连接
代码如下:
#TCPServer.py
#!/usr/bin/env python
#from socket import *
import socket
#开启ip和端口
ip_port = ('127.0.0.1',9999)
#1.生成一个句柄(创建socket对象,调用socket构造函数)
sk = socket.socket()
#2.绑定ip端口(ip和端口号)
sk.bind(ip_port)
#3.最多连接数(准备套接字,以便接受连接请求)
sk.listen(5)
#开启死循环
print ('server waiting...')
#等待链接,阻塞,直到渠道链接 conn打开一个新的对象
#专门给当前链接的客户端 addr是ip地址
#4.服务器套接字通过socket的accept()方法等待客户请求一个链接
conn,addr = sk.accept()
#5.获取客户端请求数据
print('successful link,the client address:')
print(addr)
while True:
client_data = conn.recv(1024)
#打印对方的数据
print ('receive Clinet Data-> '+client_data)
if client_data=='q': break #如果lient_data为空,则跳出循环
#向对方发送数据
conn.send(bytes('client,I\'m server'))
#关闭链接
conn.close()
sk.close()
2.建立TCP客户端
①创建TCPclient.py文件
②编写客户端代码
1)连接服务端ip和端口
2)生成套接字
3)请求连接服务端
4)发送数据,接受数据
5)关闭连接
#TCPClient.py
import socket
#连接服务端ip和端口
ip_port = ('127.0.0.1',9999)
#生成一个句柄
sk = socket.socket()
#请求连接服务端
sk.connect(ip_port)
while True:
msg = raw_input('Please Input Message:\n')
#发送数据
sk.sendall((msg))
if msg=='q': break #如果msg为空,则跳出循环
#接收数据
server_reply = sk.recv(1024)
if not server_reply: break
#打印接收到的数据
print (str(server_reply))
#关闭连接
sk.close()
3.实现服务端-客户端通讯
①运行TCPServer.py
②运行TCPclient.py
③由客户端向服务端发送消息
运行截图如下:
二、UDP编程
1.建立UDP服务器
①创建UDPServer.py文件
②编写服务器代码
1)创建socket对象,调用socket()构造函数UDP需要加参数
2)绑定IP和端口号
3)通讯阶段
4)关闭连接
代码如下:
#UDPServer.py
#!/usr/bin/env python
from socket import *
HOST = 'localhost'
PORT = 9993
s = socket(AF_INET,SOCK_DGRAM)
s.bind((HOST,PORT))
print '...waiting for message..'
while True:
data,address = s.recvfrom(1024)
print address,data
s.sendto('this is the UDP server',address)
s.close()
2.建立UDP客户端
①创建UDPClient.py文件
②编写UDP客户端代码
1)创建一个socket以连接服务器
2)使用socket的connect()方法连接服务器
3)通过sendto()和recvfrom()方法通信
4)关闭连接
代码如下:
#UDPClient.py
from socket import *
HOST='localhost'
PORT=9993
address=(HOST,PORT)
s = socket(AF_INET,SOCK_DGRAM)
while True:
message = raw_input('send message:>>')
s.sendto(message,address)
data = s.recvfrom(1024)
print data
s.close()
3.运行客户端-服务端实现通讯
三、结束语
至此使用python-socket编程的TCP和UDP编程已演示结束。
谢谢!