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

客户端:

# -*- 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+)

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

codesys tcp client通讯 tcpclisock.send_套接字