一、TCP客户端的实现
"""
客户端
"""
import socket
def main():
"""客户端"""
tcp_clinet_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_ip = input('请输入服务器的ip:')
server_port = int(input('请输入服务器的port:'))
server_addr = (server_ip,server_port)
tcp_clinet_socket.connect(server_addr)
send_data = input('请输入发送的消息:')
tcp_clinet_socket.send(send_data.encode('gbk'))
tcp_clinet_socket.close()
if __name__ == '__main__':
main()
二、TCP服务器的实现
"""
服务器
"""
import socket
def main():
"""服务器"""
tcp_server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
tcp_server.bind(("", 7890))
tcp_server.listen(128)
print('-------1--------')
new_clinet_socket, clinetAddr = tcp_server.accept()
print('-------2--------')
print(clinetAddr)
clinet_data = new_clinet_socket.recv(1024)
print(clinet_data)
new_clinet_socket.send('12345'.encode('gbk'))
new_clinet_socket.close()
tcp_server.close()
if __name__ == '__main__':
main()
三、案例:简易的文件下载器
- 客户端实现
import socket
def main():
"""文件下载客户端"""
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_ip = '192.168.1.10'
server_prot = 8080
client.connect((server_ip, server_prot))
data_file = input("请输入要下载的文件名:")
client.send(data_file.encode('utf-8'))
data = client.recv(1024)
if data:
with open('new_' + data_file, 'wb') as f:
f.write(data)
print('下载成功')
else:
print('没有这个文件下载失败')
client.close()
if __name__ == '__main__':
main()
- 服务器端实现
import socket
def send_to_client(new_client, clientaddr):
"""获取客户端的需求,打开文件给客户端发文件内容"""
file_name = new_client.recv(1024).decode('gbk')
print('%s客户要下载%s文件' % (clientaddr, file_name))
file_context = None
try :
f = open(file_name, 'rb')
file_context = f.read()
f.close()
except:
print("没有%s文件打开失败" % file_name)
if file_context:
new_client.send(file_context)
print("%s传输成功" % file_name)
new_client.close()
def main():
"""文件下载服务器"""
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind(('192.168.1.10', 8080))
server.listen(128)
while True:
new_client, clientaddr = server.accept()
send_to_client(new_client, clientaddr)
server.close()
if __name__ == '__main__':
main()