各位大神socket连接问题,客户端服务器

u010558680 2018-01-17 09:37:39
各位大神:
现在我是建立一个客户端与服务器的socket连接,进行数据的发送。现在想达到的效果是可以一个窗口界面建立50个socket连接,然后通过50个连接进行数据发送。也就是一个界面实现模拟50个客户端的需求。现在只能实现一个界面作为一个客户端。请问大神们有什么办法。
...全文
719 36 打赏 收藏 转发到动态 举报
写回复
用AI写文章
36 条回复
切换为时间正序
请发表友善的回复…
发表回复
少云 2018-01-18
  • 打赏
  • 举报
回复
引用 33 楼 u010558680 的回复:
[quote=引用 32 楼 zhe0159 的回复:] 楼主是在测试50个线程同时收发数据?
是这个意思[/quote] 我也在研究这个,不过是java。我研究的原因是发现单线程传输数据因为window size的大小问题导致速度不高。那么多线程能解决这个问题吗?
u010558680 2018-01-18
  • 打赏
  • 举报
回复
引用 32 楼 zhe0159 的回复:
楼主是在测试50个线程同时收发数据?
是这个意思
少云 2018-01-18
  • 打赏
  • 举报
回复
楼主是在测试50个线程同时收发数据?
u010558680 2018-01-18
  • 打赏
  • 举报
回复
//这是tcp连接 //连接tcp //创建 1个客户端套接字 和1个负责监听服务端请求的线程 Socket socketClient = null; Thread threadClient = null; public void button1_tcpconnect_Click(object sender, EventArgs e) { for (int i = 0; i < 50; i++) { ClientForm clientform = new ClientForm(); //定义一个套字节监听 包含3个参数(IP4寻址协议,流式连接,TCP协议) socketClient = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); //需要获取文本框中的IP地址 IPAddress ipaddress = IPAddress.Parse(txtIP.Text.Trim()); //将获取的ip地址和端口号绑定到网络节点endpoint上 IPEndPoint endpoint = new IPEndPoint(ipaddress, int.Parse(txtPort.Text.Trim())); try { //这里客户端套接字连接到网络节点(服务端)用的方法是Connect 而不是Bind socketClient.Connect(endpoint); } catch (SocketException se) { MessageBox.Show("异常:" + se.Message); } } //创建一个线程 用于监听服务端发来的消息 threadClient = new Thread(RecMsg); //将窗体线程设置为与后台同步 threadClient.IsBackground = true; //启动线程 threadClient.Start(); } /// <summary>登录 /// 发送登录包 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void button_login_Click(object sender, EventArgs e) { BuildPacketEveryState buildpacketeverystate = new BuildPacketEveryState(); buildpacketeverystate.chargepilecode = this.comboBox_selectsn.Text.ToString(); buildpacketeverystate.BuildPacket_Login(); //发包 socketClient.Send(buildpacketeverystate.loginData); }
引用 30 楼 a1357203 的回复:
好热闹,问题描述清楚再付上代码段岂不更高效?
巴顿的烦恼 2018-01-18
  • 打赏
  • 举报
回复
好热闹,问题描述清楚再付上代码段岂不更高效?
qq_29214601 2018-01-18
  • 打赏
  • 举报
回复
在线急等,又大神么
u010558680 2018-01-17
  • 打赏
  • 举报
回复
引用 14 楼 sp1234 的回复:
[quote=引用 7 楼 u010558680 的回复:] 是这个样的点连接之后呢。我做了一个for循环然后开了50个线程,建立了50个socke连接。然后服务器也连接上了。然后点登陆有个数据发送 socketClient.Send(buildpacketeverystate.loginData); 发送以后只是建立的最后一个socke连接能发送数据。我想达到的想过是点这个登陆可以在50个socke连接都发送这个数据。
既然你写 socketClient.Send(......),这其实就是你在一个对象(窗口对象)范畴中引用了一个 client 对象属性/字段。另外这个 client “建立”完了即可,跟线程无关。[/quote] 另外这个 client “建立”完了即可,跟线程无关。 这句话我不是很理解,您能解释一下么
  • 打赏
  • 举报
回复
引用 13 楼 u010558680 的回复:
[quote=引用 10 楼 sp1234 的回复:] 既然你“现在只能实现一个界面作为一个客户端”,其实封装50个自定义对象也是一样的设计。 与线程无关。
小白,不是太理解。那我具体怎么在一个界面上实现这个功能。具体思路能提供一下吗?谢谢[/quote] 你在一个窗口就建立一个连接吧。别搞什么“50个”,你目前还无法设计。
  • 打赏
  • 举报
回复
引用 7 楼 u010558680 的回复:
是这个样的点连接之后呢。我做了一个for循环然后开了50个线程,建立了50个socke连接。然后服务器也连接上了。然后点登陆有个数据发送 socketClient.Send(buildpacketeverystate.loginData); 发送以后只是建立的最后一个socke连接能发送数据。我想达到的想过是点这个登陆可以在50个socke连接都发送这个数据。
既然你写 socketClient.Send(......),这其实就是你在一个对象(窗口对象)范畴中引用了一个 client 对象属性/字段。另外这个 client “建立”完了即可,跟线程无关。
  • 打赏
  • 举报
回复
如果说“50个连接”,那么就是50个TcpClient 对象或者50个Socket 对象实例,不用贴你的线程。当没有消息收发的时候,不占用任何线程。所以这里主要地就是如何封装TcpClient或者Socket 对象,把同一类处理封装到一个 Class 中的问题。
u010558680 2018-01-17
  • 打赏
  • 举报
回复
引用 9 楼 xuzuning 的回复:
既然要登陆,显然服务端有识别是否登录的机制 你是如何将登录认可信息传递给其他连接的?
、 是这样的,不需要登陆,我这边显示的登陆其实就是一个数据包。不是说客户端需要登陆,我是将一个设备的登陆信息组包发出去。你可以理解为点击登录和注册都是发送的一个数据包。
u010558680 2018-01-17
  • 打赏
  • 举报
回复
引用 10 楼 sp1234 的回复:
既然你“现在只能实现一个界面作为一个客户端”,其实封装50个自定义对象也是一样的设计。 与线程无关。
小白,不是太理解。那我具体怎么在一个界面上实现这个功能。具体思路能提供一下吗?谢谢
  • 打赏
  • 举报
回复
既然你“现在只能实现一个界面作为一个客户端”,其实封装50个自定义对象也是一样的设计。 与线程无关。
xuzuning 2018-01-17
  • 打赏
  • 举报
回复
既然要登陆,显然服务端有识别是否登录的机制 你是如何将登录认可信息传递给其他连接的?
u010558680 2018-01-17
  • 打赏
  • 举报
回复
引用 6 楼 xuzuning 的回复:
开 50个线程,每个线程一个socket连接
你都没有说明你是怎么做的,就说不能实现?
u010558680 2018-01-17
  • 打赏
  • 举报
回复
引用 6 楼 xuzuning 的回复:
开 50个线程,每个线程一个socket连接 你都没有说明你是怎么做的,就说不能实现?
是这个样的点连接之后呢。我做了一个for循环然后开了50个线程,建立了50个socke连接。然后服务器也连接上了。然后点登陆有个数据发送 socketClient.Send(buildpacketeverystate.loginData); 发送以后只是建立的最后一个socke连接能发送数据。我想达到的想过是点这个登陆可以在50个socke连接都发送这个数据。
xuzuning 2018-01-17
  • 打赏
  • 举报
回复
开 50个线程,每个线程一个socket连接 你都没有说明你是怎么做的,就说不能实现?
u010558680 2018-01-17
  • 打赏
  • 举报
回复
引用 3 楼 sp1234 的回复:
点击“连接”之后用你的代码产生50个窗口实例呗!你只创建一个窗口对象出来?
是只创建了一个窗口实例,小白,不太懂
u010558680 2018-01-17
  • 打赏
  • 举报
回复
是只是创建了一个窗口实例
  • 打赏
  • 举报
回复
点击“连接”之后用你的代码产生50个窗口实例呗!你只创建一个窗口对象出来?
加载更多回复(15)

110,534

社区成员

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

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

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