C# socket 客户端向服务器端发送接收图片

Roger丶Yu 2017-03-24 02:59:20
C# socket 客户端如何发送Image到服务器端,服务器端如何接收image显示,请熟悉socket编程的高手帮忙提供代码
我是初学socket
...全文
1014 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
liusa1997 2018-12-23
  • 打赏
  • 举报
回复
假的吧,你那个客户端为什么要创建一个file.create(),一个自定义的图片??没必要
高逆水行舟 2017-03-25
  • 打赏
  • 举报
回复
同新手,找了段之前学的发送和接受文件的代码,仅供参考

 public void SendFile(string strFilePath)
            {
                // 读取要发送的文件
                byte[] arrFile = System.IO.File.ReadAllBytes(strFilePath);
                byte[] arrNew = MakeNew("file", arrFile);
                // 向客户端 发送文件
                sokMsg.Send(arrNew);
            }

public void GetFile (byte[] arrContent,int realLenth)
    {
        SaveFileDialog sfd = new SaveFileDialog(); //这是一个特殊的控件,需要主线程调用才能显示出来,所以进行线程同步
        //thrMsg.SetApartmentState(ApartmentState.STA);  在这个控件的调用线程之后跟着说明
        if (sfd.ShowDialog() == System.Windows.Forms.DialogResult.OK)
        {
            string savePath = sfd.FileName;
            using (System .IO .FileStream fs=new System.IO.FileStream (savePath , System.IO.FileMode .OpenOrCreate ))
            {    //使用文件流 将收到的文件数据数组从下标为1的数据开始写入,一共写真实数据长度
                fs.Write(arrContent ,1,realLenth );
            
            }
            ShowMsg("保存文件到【"+savePath +"】成功");
        }
  
      
    }

  • 打赏
  • 举报
回复
你先把最简单的socket通信搞懂了在去研究更深层次的内容会比较好
xian_wwq 2017-03-24
  • 打赏
  • 举报
回复
引用 3 楼 qq_16458561 的回复:
[quote=引用 2 楼 xian_wwq 的回复:] socket不认识图片,视频或者小说 它只处理byte[], 所以把需要发送的内容转换成byte[],接收后 按照转换规则做逆操作就可以了
具体代码有吗? 借鉴下 因为刚学 有很多不懂[/quote] http://download.csdn.net/detail/xian_wwq/9636584 参考这个看看
baidu_27549073 2017-03-24
  • 打赏
  • 举报
回复
可以,这些基本的都很简单的,百度更快一些,何必浪费100分呢
Roger丶Yu 2017-03-24
  • 打赏
  • 举报
回复
服务器端 网上的代码:

 static void Main(string[] args)
        {
            // 1. 创建socket
            Socket sListen = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            // 2. 填写IP
            IPAddress IP = IPAddress.Parse("192.168.0.41");
            IPEndPoint IPE = new IPEndPoint(IP, 4321);
            // 3. 绑定
            sListen.Bind(IPE);
            // 4. 监控
            Console.WriteLine("服务监听 ...");
            sListen.Listen(2);
            // 5. 循环接受客户端连接请求
            while (true)
            {
                Socket clientSocket;
                try
                {
                    clientSocket = sListen.Accept();
                }
                catch
                {
                    throw;
                }
                //向客户端发送数据
                //ClientSocket。发送(encoding.unicode.getbytes(“我是一个服务器,你有吗??!!!!”;
                //发送文件
                byte[] buffer = ReadImageFile("timg.jpg");
                clientSocket.Send(buffer, buffer.Length, SocketFlags.None);
                Console.WriteLine("发送成功!");
            }
        }
        private static byte[] ReadImageFile(String img)
        {
            FileInfo fileinfo = new FileInfo(img);
            byte[] buf = new byte[fileinfo.Length];
            FileStream fs = new FileStream(img, FileMode.Open, FileAccess.Read);
            fs.Read(buf, 0, buf.Length);
            fs.Close();
            //fileInfo.Delete ();
            GC.ReRegisterForFinalize(fileinfo);
            GC.ReRegisterForFinalize(fs);
            return buf;

        }
客户端:自己写的窗体 加载了一个picturebox

 private void Form1_Load(object sender, EventArgs e)
        {
            // 1. 创建socket
            Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            // 2. 填写远程IP
            IPAddress IP = IPAddress.Parse("192.168.0.168");
            IPEndPoint IPE = new IPEndPoint(IP, 4321);
            Console.WriteLine("开始连接服务 ....");
            // 3. 连接到服务器
            s.Connect(IPE);
            // 4.接收数据
            byte[] buffer = new byte[1000000];
            s.Receive(buffer, buffer.Length, SocketFlags.None);
            Console.WriteLine("接收成功");
            FileStream fs = File.Create("1.jpg");
            fs.Write(buffer, 0, buffer.Length);
            fs.Close();
            //图片显示出来
            MemoryStream ms = new MemoryStream(buffer);
            Bitmap pictureBlob = new Bitmap(Bitmap.FromStream(ms));
            this.pictureBox1.Image = pictureBlob;
            Console.ReadKey();
        }
Roger丶Yu 2017-03-24
  • 打赏
  • 举报
回复
引用 4 楼 baidu_27549073 的回复:
代码网上一搜一大堆,3楼暴露了你连socket都不会。
哈哈 尴尬了 我找了一个写了个简单的
baidu_27549073 2017-03-24
  • 打赏
  • 举报
回复
代码网上一搜一大堆,3楼暴露了你连socket都不会。
Roger丶Yu 2017-03-24
  • 打赏
  • 举报
回复
引用 2 楼 xian_wwq 的回复:
socket不认识图片,视频或者小说 它只处理byte[], 所以把需要发送的内容转换成byte[],接收后 按照转换规则做逆操作就可以了
具体代码有吗? 借鉴下 因为刚学 有很多不懂
xian_wwq 2017-03-24
  • 打赏
  • 举报
回复
socket不认识图片,视频或者小说 它只处理byte[], 所以把需要发送的内容转换成byte[],接收后 按照转换规则做逆操作就可以了
全栈极简 2017-03-24
  • 打赏
  • 举报
回复
socket发送接收的都是字节数组,将图片转换为字节数组发送就可以了,接收端接收后再转为图片。 http://www.jb51.net/article/63359.htm

110,534

社区成员

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

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

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