在学习网络编程之前,我们先来回顾一下什么是客户端/服务器架构。在服务器响应客户端请求之前,必须进行一些初步的设置流程来为之后的工作做准备。 首先会创建一个通信端点,它能够使服务器监听请求。等待客户端连接。什么是Socket? Socket又称"套接字",应用程序通常通过"套接字"向网络发出请求或者应答网络请求,使主机间或者一台计算机上的进程间可以通讯。创建套接字连接有两种方式,一种是是面向连接的套接字TCP,另一种是面向无连接的套接字UDP。
- 创建TCP服务器
#Encoding = UTF-8
'''
@author:xianyt
@vertion:python3
@date:2018/8/2
@function:实现用socket接受一个文件
'''
import socket;
if __name__ == "__main__":
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) #创建服务器套接字
s.bind(('127.0.0.1', 8888)) #套接字与地址绑定,服务器的ip和端口
s.listen(5) #监听连接
sock, addr = s.accept(); #接受客户端连接
fileName = input("请输入要写入的文件")
with open(fileName,'wb') as file:
while True:
data = sock.recv(1024) #对话(接受)
if data:
file.write(data)
else:
break;
sock.close() #关闭连接和套接字
s.close()
- 创建TCP客户端
#Encoding = UTF-8
'''
@author:xianyt
@vertion:python3
@date:2018/8/2
@function:实现用socket发送一个文件
'''
import socket
if __name__ == '__main__':
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) #创建套接字连接
s.connect(('127.0.0.1', 8888)); #尝试连接客户端,服务器的ip和端口
fileName = input("请输入需要传输的文件路径")
with open(fileName, 'rb') as file:
while True:
data = file.read(512);
if data:
s.send(data); #对话(发送)
else:
break;
s.close(); #关闭资源
- 首先启动服务器(在任何客户端试图连接之前)。服务器是被动对象,被动的等待连接。客户端是主动对象,主动连接服务器。
- 创建UDP服务器
#Encoding = UTF-8
'''
@author:xianyt
@vertion:python3
@date:2018/8/2
@function:实现用socketUDP实时聊天
'''
import socket;
if __name__ == '__main__':
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM); #创建UDP连接
s.bind(('127.0.0.1', 8888));#绑定服务器套接字
while True:
data,addr = s.recvfrom(1024);#对话(接受)
print("client说:", data.decode('utf-8')); #转换编码
data = input("请输入聊天信息");
s.sendto(data.encode(encoding='UTF-8'),('127.0.0.1',9999)); #对话(发送)
if 'bye' in data:
break;
s.close()#关闭资源
- 创建UDP客户端
#Encoding = UTf-8 ''' @author:xianyt @vertion:python3 @date:2018/8/2 @function:实现用socketUDP实时聊天 ''' import socket; if __name__ == '__main__': s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) #创建UDP s.bind(("127.0.0.1", 9999)); #绑定客户端套接字 while True: data = input("请输入聊天信息:"); s.sendto(data.encode(encoding='utf_8'), ('127.0.0.1', 8888)) #客户端是先发送数据 if 'bye' in data: break data, addr = s.recvfrom(1024); #对话(接受) print("服务器说:", data.decode('utf-8')); s.close() #关闭资源
- TCP和UDP的区别:首先是语法上的区别,TCP是面向连接的,也就是在传送数据之前需要连接。 tcp对网络条件要求高比如传输文件之类的,udp更适合实时传输。 tcp使用listen accpet, udp不需要等等...