话不多说,直接上代码:
这是C#这边作为客户端
- using System; // 这些是需要用到的库
- using System.Net.Sockets;
- using System.Net;
- using System.Windows.Forms;
- using System.IO;
- namespace qiang
- {
- 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中一致)
- public Form1()
- {
- InitializeComponent();
- }
- 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这边作为服务端
- import socket
- import cv2
- def get_host_ip(): # 获得ip
- try:
- 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
- finally:
- s.close()
- return 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') # 二进制写入
- while True:
- data = conn.recv(1024) # 指定最大接收量
- files.write(data) # 读取数据
- if not data:
- print("图片接收完毕")
- break
- files.close() # 关闭
- conn.close()
- img = cv2.imread("./enmm.jpg") # 用cv2打开图片
- cv2.imshow('dabo', img)
- cv2.waitKey()
这是我设计的窗口,其中有一些是练习测试时剩下的,大家只要管三个按钮即可,就依次点击(连接-发送-退出)
就即可在python这边窗口看到图片了
这是我第一次学习的结果,代码还不是很完善,希望各位能在评论区指出我的不足
联系客服