关于socket编程的小总结

最近在写一些socket小程序,因为是初次写,所以在一些细节上遇到一些问题,这里说一下我对其中某些问题的理解,如果不正确,欢迎指正。

在我的程序中,我想把发送和接收数据的操作分别放在两个线程中,即发送线程和接收线程。

在最初的实现中,我的两个线程使用的是共同的一个socket以及端口号,接收和发送信息到服务器。服务器通过获得的我的ip及端口号,返回给我发送到服务器的字串。

在实验过程中,发现我启动的2个线程都正常启动,但是只有发送线程在工作,接收线程在select socket时,检测不到有哪个socket是可读的。

1.这是因为socket只能同时进行一种发送或者接收操作,我的写操作率先占用了这个socket,读操作就不能进行了。(有一点不太明白,我的写操作是每隔100ms才写一次,在这个时间段,读操作也“抢占”不了socket吗?)

2.对于这个问题,我试着创建了2个socket,即读和写分别占用一个。 起初绑定在同一个ip和端口上,莫名的成功了,之所以说莫名,是因为后来一直失败,查看msdn知道了,一个ip端口只能绑定一个socket(通常每个套接字地址 (协议/网络地址/端口)只允许使用一次。)。后来绑定到不同的端口上,实验了一下,可以了。

3.为了方便服务器端后续的操作,最终选择了使用一个mutex的操作。

一上午就为了这个,自我感觉挺值的。因为以前一直不喜欢socket编程,现在自己动手操作一下,慢慢来,也不会很难的。

如果我哪里说错了,欢迎指正,一起交流。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值