网络传送图片

cvman 2005-08-17 11:54:54
我练习做网络传送图片
问题1:为什么我收到的图片上部五分之一左右是漆黑一片?
问题2,接收端如何能知道发送端图片大小以便设定接收数组大小?谢谢!

界面很简单:
1.发送端一个picturebox内有一幅图,一个button为发送按钮。
2.接收端一个picturebox、一个button为接收按钮,接收后picturebox的image赋为传过来的图片。

下面是源程序:
发送端:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim sendsocket As New Net.Sockets.Socket(Net.Sockets.AddressFamily.InterNetwork, Net.Sockets.SocketType.Stream, Net.Sockets.ProtocolType.Tcp) '实例化socket
Dim ipendpiont As New Net.IPEndPoint(Net.IPAddress.Parse("192.168.0.1"), 8888) '建立终结点

Dim Stream As New IO.MemoryStream
PictureBox1.Image.Save(Stream, System.Drawing.Imaging.ImageFormat.Bmp)
Dim b As Byte() = Stream.ToArray

sendsocket.Connect(ipendpiont) '连接远程计算机
sendsocket.Send(b) '发送

Stream.Close()
sendsocket.Shutdown(Net.Sockets.SocketShutdown.Send) '关闭发送连接
sendsocket.Close() '关闭本
End Sub
’接收端
Dim receivesocket As New Net.Sockets.Socket(Net.Sockets.AddressFamily.InterNetwork, Net.Sockets.SocketType.Stream, Net.Sockets.ProtocolType.Tcp)

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim hostipendpiont As New Net.IPEndPoint(Net.IPAddress.Parse("192.168.0.1"), 8888)
receivesocket.Bind(hostipendpiont) '建立远程计算机的的socket
receivesocket.Listen(2) '监听socket
End Sub

Private Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
Try
Dim b(1765106) As Byte ‘如何确定该数组大小
Dim fs As New System.IO.MemoryStream
Dim hostsocket As Net.Sockets.Socket = receivesocket.Accept() '同意和发送端计算机建立连接
hostsocket.Receive(b)
fs.Write(b, 0, b.Length)

Dim Img As New Bitmap(fs)
PictureBox1.Image = Img

fs.Close()
hostsocket.Shutdown(Net.Sockets.SocketShutdown.Receive)
hostsocket.Close()

Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub

...全文
263 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
tanta 2005-08-20
  • 打赏
  • 举报
回复
//获取p1的图片流
System.IO.MemoryStream m=new MemoryStream();
System.IO.MemoryStream m2=new MemoryStream();
p1.Image.Save(m,System.Drawing.Imaging.ImageFormat.Jpeg);
m.Flush();
//转化成数组
Byte[] b=m.ToArray();
//中间可以传输数组
//MessageBox.Show("数据大小为:"+ (b.Length/1024).ToString()+"KB");
//接受
m2.Write(b,0,b.Length);
m2.Flush();
Bitmap map=new Bitmap(m2);
p2.Image=map;
cvman 2005-08-20
  • 打赏
  • 举报
回复
up
cvman 2005-08-18
  • 打赏
  • 举报
回复
谁有例子
TechEye 2005-08-17
  • 打赏
  • 举报
回复
1)可能是你丢包引起的
2)发送图片时,你可以自己定义一个结构,前面2字节用来指示图片长度.

还原前面两字节为整数
(第一字节<<8 ) + 第二字节

sx_lxh 2005-08-17
  • 打赏
  • 举报
回复
关注。
silverseven7 2005-08-17
  • 打赏
  • 举报
回复
olo
cvman 2005-08-17
  • 打赏
  • 举报
回复
up

110,580

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧