特急,winsock基础问题

xzou 2000-09-10 04:59:00
我初学winsock,上手遇到很多问题,看帮助也不是很清楚,首先bind时要用到一个sockaddr或sockaddr_in的结构,可我不知道如何设置才正确,sin_port是直接设为端口号(如8000)还是由htons(8000)转化成的,还有IP地址是怎样设得也不太清楚,我尝试做在本机一个listen(服务器端)和connect(客户端),结果listen报了一个地址已使用的错误,错误号是10048.而客户端报的是WSANOTSOCKET的错误,错误号是10038,不知哪位能给一个解释,在下不胜感激,因为在出差,所以找不到书,而且时间很紧,希望各位帮帮我吧.
...全文
175 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
sxbyl 2000-09-11
  • 打赏
  • 举报
回复
sockaddr_in中的sin_port为主机字节顺序,因为这个信息只会在socket的实现中用到,与网络无关。unsigned long inet_addr ( const char FAR * cp )可返回网络字节顺序的IP地址,(其参数是型为"10.1.1.14"的IP地址),可直接用在in_addr结构的S_un.S_addr中。
如果你使用Socket API的话,服务端必须用bind(用CSocket就不用了),bind中的端口需和客户端connect中的一致。客户端不需bind(对于面向连接的,也是最常用的)。还有,在服务端建立socket是必须指定一个port,而在客户端可将(一般也是这么做的)端口设为0,在运行时由系统为其动态分配端口。
ppc207 2000-09-11
  • 打赏
  • 举报
回复
是这样的:首先你要分清楚作什么程序是udp,还是tcp,我只说tcp。其实bind并不需要,首先你要申请一个socket,用create(),他有两个参数,第一个是用于接收数据的本地端口,和类型(SOCK_STEAME\SOCK_DGRAM),这是任何程序都需要的,然后服务器开始listen(),不用写参数,客户端用connect()两个参数,第一个是ip地址直接写就行,第二个是服务端接收的端口,必须create过。那么在服务端的onAccept中写上Accept()一个参数,是用于接收的socket的指针。
然后就receive()两个参数,一个是用于接收的buffer(可以是数组、结构),另一个是buffer的大小。这就行了。至于10048是端口或地址已被占用,换一个试试。
xzou 2000-09-10
  • 打赏
  • 举报
回复
问题是服务器的侦听端口必须和客户端连接端口必须一致,bind好像是connect前必须作的吧
gameboy999 2000-09-10
  • 打赏
  • 举报
回复
我只用过vb,但我知道你若是在同一台机上用winsock的话,其服务端的端口必须与客户端的端口不同(而且你用了band属性),除非用随机值.
所以解决的方法是将不同的端口号分别给服务端与客户端,这样问题就可以解决了:)
其实仔细想想就明白了.

16,467

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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