打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

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

话不多说,直接上代码:

这是C#这边作为客户端

  1. using System; // 这些是需要用到的库
  2. using System.Net.Sockets;
  3. using System.Net;
  4. using System.Windows.Forms;
  5. using System.IO;

  6. namespace qiang
  7. {
  8. public partial class Form1 : Form
  9. {
  10. Socket tcpClient = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); // 初始化创建,绑定内网、流、TCP协议
  11. EndPoint remoteIp = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 8888); // 获取ip、端口(ip和端口要和python中一致)

  12. public Form1()
  13. {
  14. InitializeComponent();
  15. }

  16. private void lian_Click(object sender, EventArgs e) // 这是连接按钮
  17. {
  18. tcpClient.Connect(remoteIp); // 与python那边服务端连接
  19. }
  20. private void send_Click(object sender, EventArgs e) // 这是发送按钮
  21. {
  22. FileStream FileStream = new FileStream("D:\\picture\\dabo\\xixi.jpg", FileMode.Open); // 以文件流打开一个图片
  23. byte[] byData = new byte[FileStream.Length]; // 二进制格式存储
  24. FileStream.Read(byData, 0, byData.Length); // 读取图片的二进制数据到发送的缓存区
  25. tcpClient.SendTo(byData, remoteIp); // 发送图片
  26. FileStream.Close(); // 关闭文件流传输
  27. }

  28. private void tui_Click(object sender, EventArgs e) // 这是退出按钮
  29. {
  30. tcpClient.Close(); // 结束通讯
  31. }

  32. }
  33. }

这是python这边作为服务端

  1. import socket
  2. import cv2

  3. def get_host_ip(): # 获得ip
  4. try:
  5. s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # 初始化创建(ipv4和UDP协议)
  6. s.connect(('127.0.0.1', 80)) # 先自己socket通讯注册一个ip和端口(随便写一个ipv4的和端口)
  7. ip = s.getsockname()[0] # 取得通讯的ip
  8. finally:
  9. s.close()
  10. return ip

  11. ip_port = (get_host_ip(), 8888) # 先自己注册一个(随便写一个端口)
  12. sk = socket.socket() # 创建套接字
  13. sk.bind(ip_port) # 申请一个(空闲可以使用的端口)

  14. sk.listen(5) # 设置这个服务端可连接的客户端数量
  15. print('启动socket服务,等待客户端连接')
  16. conn, address = sk.accept() # 等待连接,此处自动阻塞

  17. files = open("enmm.jpg", 'wb') # 二进制写入
  18. while True:
  19. data = conn.recv(1024) # 指定最大接收量
  20. files.write(data) # 读取数据
  21. if not data:
  22. print("图片接收完毕")
  23. break

  24. files.close() # 关闭
  25. conn.close()

  26. img = cv2.imread("./enmm.jpg") # 用cv2打开图片
  27. cv2.imshow('dabo', img)
  28. cv2.waitKey()

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

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

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

 

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
C# Socket的TCP通讯
C# .net2.0 套接字编程实例 UDP TCP通信
C#网络编程入门
如何利用python扫描某个网段内活动的主机以及某个主机开放的端口?
python利用setsockopt获得端口重用
用Python开发基于Socket聊天程序
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服