吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 956|回复: 12
收起左侧

[求助] 【求助】C#socket问题

[复制链接]
lizf2019 发表于 2021-8-23 08:50
本帖最后由 lizf2019 于 2021-8-23 08:54 编辑

源码(方法):发送端:
[C#] 纯文本查看 复制代码
 public  void Send(IPEndPoint ip, string path)
        {
            Socket sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            sock.Connect(ip);
            using (FileStream reader = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.None))
            {
                long send = 0L, length = reader.Length;
                sock.Send(BitConverter.GetBytes(length));
                string fileName = Path.GetFileName(path);
                sock.Send(Encoding.Default.GetBytes(fileName));
                Console.WriteLine("Sending file:" + fileName + ".Plz wait...");
                byte[] buffer = new byte[BufferSize];
                int read, sent;
                //断点发送 在这里判断设置reader.Position即可
                while ((read = reader.Read(buffer, 0, BufferSize)) != 0)
                {
                    sent = 0;
                    while ((sent += sock.Send(buffer, sent, read, SocketFlags.None)) < read)
                    {
                        send += (long)sent;
                        //Console.WriteLine("Sent " + send + "/" + length + ".");//进度
                    }
                }
                Console.WriteLine("Send finish.");
            }
        }


接收端:
[C#] 纯文本查看 复制代码
  public static void Receive(IPEndPoint ip, string path)[/b][/size][size=6][b]            {
                
                Socket sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                sock.Bind(ip);
                sock.Listen(1);
                Socket client = sock.Accept();
                byte[] buffer = new byte[BufferSize];
                client.Receive(buffer);
                long receive = 0L, length = BitConverter.ToInt64(buffer, 0);
                string fileName = Encoding.Default.GetString(buffer, 0, client.Receive(buffer));
                Console.WriteLine("Receiveing file:" + fileName + ".Plz wait...");
                using (FileStream writer = new FileStream(Path.Combine(path, fileName), FileMode.Create, FileAccess.Write, FileShare.None))
                {
                    int received;
                    //断点接受 在这里判断设置writer.Position即可
                    while (receive < length)
                    {
                        received = client.Receive(buffer);
                        writer.Write(buffer, 0, received);
                        writer.Flush();
                        receive += (long)received;
                        Console.WriteLine("Received " + receive + "/" + length + ".");//进度
                    }
                }
                Console.WriteLine("Receive finish.");
            }
        }
服务器端我是在form_load里写的:
image.png
image.png


(服务器端会卡死)
传输端: image.png image.png
(报错无法连接)

求大佬指点

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

sujing2857 发表于 2021-8-23 08:54
你可以先用个工具单独测试服务端或者客户端。另外直接csdn下个例子照着改改就行了
小白来袭2 发表于 2021-8-23 09:40
服务器是不是没开端口,先在自己电脑写好接受和发送,在上服务器
 楼主| lizf2019 发表于 2021-8-23 10:21
小白来袭2 发表于 2021-8-23 09:40
服务器是不是没开端口,先在自己电脑写好接受和发送,在上服务器

服务器端是应怎么写呢
ordinarysoul 发表于 2021-8-23 10:42
本帖最后由 ordinarysoul 于 2021-8-23 11:02 编辑

把服务器IP或者127.0.0.1换成IPAddress.Any
 楼主| lizf2019 发表于 2021-8-23 10:53
ordinarysoul 发表于 2021-8-23 10:42
我的判断是socket默认的发送缓冲也就是send大小超过默认值,使用setsockopt修改缓冲区大小。
或者客户端加 ...

大佬这个是连接都连不上
ordinarysoul 发表于 2021-8-23 11:03
lizf2019 发表于 2021-8-23 10:53
大佬这个是连接都连不上

没注意看问题。ipaddress.parse("ip地址")换成IPAddress.Any试试
 楼主| lizf2019 发表于 2021-8-23 11:23
ordinarysoul 发表于 2021-8-23 11:03
没注意看问题。ipaddress.parse("ip地址")换成IPAddress.Any试试

image.png
还是不行
image.png
ordinarysoul 发表于 2021-8-23 11:26

端口应该问题不大,建议排查一下,服务器端的监听地址和请求地址确保一致。
你是不是本地测试没问题,挂到服务器端就无法连接了
ordinarysoul 发表于 2021-8-23 17:42

我在本地创建两个项目模拟服务端和客户端,粘贴你的代码,没有任何问题。
客户端地址是127.0.0.1 服务端地址IPAddress.Any
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 23:37

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表