中易网

c# socket TCP P2P 要怎样才能让同一端口重新连接

答案:2  悬赏:0  
解决时间 2021-02-04 12:02
最近在做相关的东西,我是这样理解P2P的:A和B都向S通信,如果A要连接B,需要先创建一个SOCKET SA连接S的一个端口SS,S通过SS与SA的连接得到SA端口的外网地址AS,然后把这个外网地址AS传给B,B也一样通过S将SB的外网地址BS传给A。A断开与S的连接的SA,B也一样断开SB,然后A用SA去连接SB的外网地址BS,之后转为listen模式等待B用SB连接AS。(可能有点乱。)

现在的问题是,如果我将这个新的SOCKET SA断开后(使用
client_mid.Shutdown(SocketShutdown.Both);
client_mid.Disconnect(false);//改为TRUE 则需要用beginCounnect,但我想用Counnect,且延时过长
client_mid.Close();


怎样才能再用这个Socket SA Counect B的外网地址BS?提示释放对象无法调用,改TRUE提示用异步调用且不能为同一IPENDPIONT?
因为要做到NAT穿网,如果我重新定义这个端口(比如CLOSE()后),对应的NAT的外网地址会不会改变了(原来SA对应着外网地址为AS,执行关闭后重新套接字后会不会SA就没有对应AS了?)?这样就连接不上了啊!
而且至今找不到方法来重新用这个socket SA来连接B的socket SB的外网地址BS!!

已解决,很简单,c#提供了这样一个功能SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);//端口复用!一个端口永两个套接字,然后其中一个套接字和服务器连接,另一个则可以和另一个客户端连接。因为都是同一端口,所以NAT映射的端口肯定一样。然后由于套接字的counnect目标IPEndPIONT不一样,所以不会冲突(大概,有待验证。)
最佳答案
每次调用的对象是重新构造的还是同一个,要么试试每次都重新构造对象来连接。
全部回答
我。。知。。道 加。。我。。私。。聊
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
向往外贸休闲服装地址有知道的么?有点事想过
三国里面的赵云怎么死的,为何一生中没过伤
三一235挖掘机引导轮和什么挖掘机是一样的
青岛北站到岙山卫镇,星石庄村怎么座车最近
人的脸上为什么会长毛
胜湘百货商场(白石店)地址在什么地方,想过去
排列组合问题:有6双手套,是6种颜色,从中取
有没有和宝宝说话宝宝不理人的
威之群电动轮椅怎么调速啊,求解
工学专班是什么意思
猎豹飞腾加速时车身左右摇摆
李记荣泰堂怎么去啊,有知道地址的么
北京朝阳区二手房买卖流程及费用
买了10年的二手房了过户费怎么算?
国家电网是事业单位吗
推荐资讯
一部奥特曼的电影,一开始是两个小孩幻想的怪
请问哪所大学的MBA不要求三年工作经验也能招
请问大家有谁知道夏茅顺丰快递取件电话是多少
求四年级下册语文(人教版)阳光课堂的答案
上海闵行区哪里有卖特百惠的水杯。
巴西足球场上的主将是谁?
netshare无线路由器怎么设置密码
2017年从新加坡回国没报住址能进新加坡吗
优学辅导学校地址在什么地方,想过去办事
铁路塘在什么地方啊,我要过去处理事情
一个人呆久了,不知不觉中就习惯了
“观光电梯”用英语怎么说
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?