| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 8169 人关注过本帖
标题:如何获得bing绑定端口的端口号
取消只看楼主 加入收藏
lyl930130
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:323
专家分:111
注 册:2013-5-13
结帖率:91.43%
收藏
已结贴  问题点数:20 回复次数:5 
如何获得bing绑定端口的端口号
用addr_listen.sin_port=htons(0)绑定一个系统分配的端口,如何获得该端口号
搜索更多相关主题的帖子: 如何 
2016-04-15 00:13
lyl930130
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:323
专家分:111
注 册:2013-5-13
收藏
得分:0 
回复 2楼 rjsp
是这么的。
最开始服务器监听的是80端口,客户端连接的也是80端口。
但是这个端口只用来监听客户端的连接。一有连接,服务器就再另外监听一个新的端口,并把该端口号通过80发回客户端,然后客户端断开连接,重新connect新的端口。


我自己写的C/S通信,用的端口复用,一个端口同时对应多个客户端的连接。
不传文件,只是简短的传输数据没有问题,但是只要一传大文件,比如一部电影,就会出现传过去1024字节,只收到几百字节的情况。想解决这个问题,目前只想到每个客户端单独分配一个端口。因为之前一个端口只对应一个客户端的时候,传大文件是没有问题的。
2016-04-15 21:08
lyl930130
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:323
专家分:111
注 册:2013-5-13
收藏
得分:0 
回复 4楼 rjsp
关于第一个问题:
服务器:                                   
程序代码:
 sock_listen.sin_port=htons(80);
while(1)
{
listen(sock_listen)
{
    SOCKET sock_tmp,sock_client;
    sock_tmp=accept(sock_listen);
    {
        sock_client=(AF_INET,SOCK_STREAM,0);
        Create_Thread(sock_client);//单独开一个线程监听该端口,和客户端交互数据
        Port=GetPort(sock_client);//这个就是要问的函数
        send(sock_tmp,Port,sizeof(Port),0);
    }
}
}


关于第二个问题:
数据流和数据包这个问题,我还没有理解清楚。但是现在我是这么做的:
服务器:
程序代码:
while(1)
{
    memset(data,0,sizeof(data));
    ReadFile(hFile,data,1024,&len,NULL);
    send(sock,data,1024,0);
    if(len<1024)
    {   
        send(sock,"over",1024,0);
        break;
    }
}


客户端:
程序代码:
while(1)
{
    ret=recv(sock,data,1024,0);
    if(strcmp(data,"over")==0)
        break;
    WriteFile(hFile,data,1024,&len,NULL);
}


不知道有没有说清楚。
2016-04-16 10:06
lyl930130
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:323
专家分:111
注 册:2013-5-13
收藏
得分:0 
找到了。
用getsockname就可以了
2016-04-17 00:42
lyl930130
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:323
专家分:111
注 册:2013-5-13
收藏
得分:0 
回复 7楼 rjsp
sock_tmp的问题:
之所以用sock_tmp,是因为这个socket建立起来只发送了服务器专门为客户端准备的端口,双方就结束了通信(双方都关闭了socket)。服务器关闭socket,等待下一个连接。这里在send()之后漏了closesocket(sock_tmp)

发送端口号发给对方问题:
我为每一个连接到服务器的客户端准备一个独立的端口,但是服务器创建这个端口是这么来的:htons(0)
您之前也说了,客户端用htons(0),因为connect会帮你找到源端口号,但是对服务器来说就不行,因为他是被连。所以我用getsockname()找出htons(0)对应的端口号,然后将其告诉客户端,知道了目标端口客户端才能connect。

send和recv问题:
知道了,会改正。
请教一下,recv这边,是用接收缓冲区的最大值吗?(char data[1024])

2016-04-18 17:04
lyl930130
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:323
专家分:111
注 册:2013-5-13
收藏
得分:0 
回复 7楼 rjsp
因为之前没接触过多线程/并行程序代码,自己闭门造车的东西,不对的地方还请版主多多指正
2016-04-19 16:09
快速回复:如何获得bing绑定端口的端口号
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017249 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved