tcp 互相发送消息 与 下载文件

互相发送消息(我使用的是自己给自己发消息 改变主机名 与端口号 可实现不同主机之间通信)

客户端:

# -*- coding: utf-8 -*-   
from socket import *  
  
HOST = 'localhost'          #主机名  
PORT =  9999               #端口号 与服务器一致  
BUFSIZE = 1024              #缓冲区大小1K  
ADDR = (HOST,PORT)  
  
tcpCliSock = socket(AF_INET, SOCK_STREAM)  
tcpCliSock.connect(ADDR)    #连接服务器  
  
while True:                 #无限循环等待连接到来  
    try:  
        data = raw_input('Client')  
        if not data:  
            break  
        tcpCliSock.send(data)            #发送数据
        
        data = tcpCliSock.recv(BUFSIZE)  #接受数据  
        if not data:  
            break  
        print 'Server: ', data  
    except Exception,e:  
        print 'Error: ',e  
          
tcpCliSock.close()          #关闭客户端  

 

服务器端:

# -*- coding: utf-8 -*-   
from socket import *  
from time import ctime  
  
HOST = 'localhost'          #主机名  
PORT =  9999               #端口号  
BUFSIZE = 1024              #缓冲区大小1K  
ADDR = (HOST,PORT)  
  
tcpSerSock = socket(AF_INET, SOCK_STREAM)  
tcpSerSock.bind(ADDR)       #绑定地址到套接字  
tcpSerSock.listen(5)        #监听 最多同时5个连接进来  
  
while True:                 #无限循环等待连接到来  
    try:  
        print 'Waiting for connection ....'  
        tcpCliSock, addr = tcpSerSock.accept()  #被动接受客户端连接  
        #print u'Connected client from : ', addr  
  
        while True:  
            data = tcpCliSock.recv(BUFSIZE)     #接受数据  
            if not data:  
                break  
            else:  
                print 'Client: ',data
            ss=raw_input('Server')
            tcpCliSock.send(ss)  
  
    except Exception,e:  
        print 'Error: ',e  
tcpSerSock.close()          #关闭服务器  


tcp下载文件(我使用的是本机 与 阿里云服务器):

 

客户端:

# -*- coding: cp936 -*-
import socket
 
if __name__ == '__main__':
    # 创建套接字,AF_INET:ipv4,SOCK_STREAM:TCP协议
    tcp_client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    # 和服务端连接
    tcp_client_socket.connect(("服务器ip地址", 5555))
    # 发送下载文件的请求
    file_name = 'cs.txt'
    # 个人在服务端和客户端都采用utf-8编码
    file_name_data = file_name.encode("utf-8")
    # 发送请求数据
    tcp_client_socket.send(file_name_data)
    # 把数据写入到文件里
    with open("C:/Users/Administrator/Desktop/" + file_name, "a+") as file:
        while True:
            # 循环接收文件数据
            file_data = tcp_client_socket.recv(1024)
            # 只要接收到数据,就写入
            if file_data:
                file.write(file_data)
            else:
                print("服务端把数据发送完成并关闭了连接")
                break
    # 关闭套接字
    tcp_client_socket.close()


服务器:

# -*- coding: utf-8 -*-
import socket
import os
 
 
if __name__ == '__main__':
 
    # 在这里我将os.path的默认路径进行了更改,改到了桌面
    os.chdir("C:/study/class/")
    # 创建tcp服务端套接字
    tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    # 绑定端口号,ip地址不绑定
    tcp_server_socket.bind(("", 5555))
    # 程序结束,释放端口号,端口号复用
    tcp_server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True)
    # 设置监听,把主动套接字变成被动套接字,服务端套接字只负责接收客户端的连接请求
    tcp_server_socket.listen(128)
    while True:
        service_client_socket, ip_port = tcp_server_socket.accept()
        print("客户端连接成功了:", ip_port)
        # 接收客户端的请求信息
        file_name_data = service_client_socket.recv(1024)
        # 对二进制数据进行解码
        file_name = file_name_data.decode("utf-8")
        print(file_name)
        # 判断文件是否存在
        if os.path.exists(file_name):
            # 文件存在
            with open(file_name, "rb") as file:
                # 读取文件数据
                while True:
                    # 循环读取文件数据
                    file_data = file.read(1024)
                    #表示读到数据
                    if file_data:
                        # 然后把数据发送给客户端
                        service_client_socket.send(file_data)
                    else:
                        print("请求的文件数据发送完成")
                        break
        else:
            print("您请求下载的文件不存在")
        # 终止和这个客户端服务
        service_client_socket.close()
        # 终止客户端连接请求服务, 服务端的套接字可以不用关闭
        tcp_server_socket.close()

 

服务器端需要在指定目录下 写该文件,客户端不用先新建(使用的a+)

先运行服务器,再运行客户端

tcp 互相发送消息 与 下载文件_第1张图片

你可能感兴趣的:(python)