socket通讯 实现C# 与 python 图片传输(还需改良)

话不多说,直接上代码:

这是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()

2239fb6626ab469d8c902a7d7e9f5df7.png

 这是我设计的窗口,其中有一些是练习测试时剩下的,大家只要管三个按钮即可,就依次点击(连接-发送-退出)

633023af8e2048dd84f4a2088656c27a.png

就即可在python这边窗口看到图片了

15d351df25334fb99cddc26a992dc202.png

 这是我第一次学习的结果,代码还不是很完善,希望各位能在评论区指出我的不足

 

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值