话不多说,直接上代码:
这是C#这边作为客户端
using System; // 这些是需要用到的库 using System.Net.Sockets; using System.Windows.Forms;
public partial class Form1 : Form Socket tcpClient = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); // 初始化创建,绑定内网、流、TCP协议 EndPoint remoteIp = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 8888); // 获取ip、端口(ip和端口要和python中一致)
private void lian_Click(object sender, EventArgs e) // 这是连接按钮 tcpClient.Connect(remoteIp); // 与python那边服务端连接 private void send_Click(object sender, EventArgs e) // 这是发送按钮 FileStream FileStream = new FileStream("D:\\picture\\dabo\\xixi.jpg", FileMode.Open); // 以文件流打开一个图片 byte[] byData = new byte[FileStream.Length]; // 二进制格式存储 FileStream.Read(byData, 0, byData.Length); // 读取图片的二进制数据到发送的缓存区 tcpClient.SendTo(byData, remoteIp); // 发送图片 FileStream.Close(); // 关闭文件流传输
private void tui_Click(object sender, EventArgs e) // 这是退出按钮 tcpClient.Close(); // 结束通讯
这是python这边作为服务端
def get_host_ip(): # 获得ip s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # 初始化创建(ipv4和UDP协议) s.connect(('127.0.0.1', 80)) # 先自己socket通讯注册一个ip和端口(随便写一个ipv4的和端口) ip = s.getsockname()[0] # 取得通讯的ip
ip_port = (get_host_ip(), 8888) # 先自己注册一个(随便写一个端口) sk = socket.socket() # 创建套接字 sk.bind(ip_port) # 申请一个(空闲可以使用的端口)
sk.listen(5) # 设置这个服务端可连接的客户端数量 print('启动socket服务,等待客户端连接') conn, address = sk.accept() # 等待连接,此处自动阻塞
files = open("enmm.jpg", 'wb') # 二进制写入 data = conn.recv(1024) # 指定最大接收量
img = cv2.imread("./enmm.jpg") # 用cv2打开图片
这是我设计的窗口,其中有一些是练习测试时剩下的,大家只要管三个按钮即可,就依次点击(连接-发送-退出)
就即可在python这边窗口看到图片了
这是我第一次学习的结果,代码还不是很完善,希望各位能在评论区指出我的不足
|