我在程序中已经设置了某口端口为TCP监听端口(比如3555),属性为SO_REUSEADDR以及非阻塞!现在,我想向客户端发送TCP消息,发出的消息端口可以使3555吗?怎么做?谢谢!
解决方案 »
- 求 图片拼合简单例子代码
- 关于在控件上DrawText或者TextOut的问题
- 已知:CToolTipCtrl Tip 如何设定Tip的大小?谢谢。
- 谁能给我提供点写AVI文件的想法,我总是无法做到声音和视频同步!非DSHOW
- 求一个有联合开发网账号好心人下载一个文件发到[email protected]
- 用CSocket写的接受pop3回应的问题!请各位高手指教
- 谁会smtp协议
- VC++ 编辑报错
- 串口通信设置那有问题//为啥波特率不稳定,有时9600能收到数据、2400能收到数据
- 救急!在Windows操作系统下能否实现X-Client?
- 大家好,java想转网络安全编程,有什么好的途径?
- socket失效的问题
只有UDP才能省略握手直接收发
我前面说过了。他这需求是跟飞鸽传书一样的。如果是tcp ,对方又如何知道你的ip呢? 如果知道你的ip那就似乎是服务端的概念了。
我的代码如下:if ((tcpsk = socket(AF_INET, SOCK_STREAM, 0)) == INVALID_SOCKET)//建立tcp对应socket
return FALSE;
sockaddr_in myaddr;
memset(&myaddr, 0, sizeof(myaddr));
myaddr.sin_family = AF_INET;
myaddr.sin_addr.s_addr = INADDR_ANY;
myaddr.sin_port = htons(3555);
if (bind(tcpsk, (LPSOCKADDR)&myaddr, sizeof(myaddr)) != 0)
{
AfxMessageBox("TCP绑定失败");
} if (ioctlsocket(tcpsk, FIONBIO, (unsigned long *)&flg) != 0)//设置为非阻塞
return FALSE;
if(setsockopt(tcpsk, SOL_SOCKET, SO_REUSEADDR, (char *)&flg, sizeof(flg)) != 0)
return FALSE; if (listen(tcpsk, 3) != 0)
return FALSE;///////////////////////////////////////////
以上是在程序A中的tcp端口的绑定直到监听的过程,如果用同一个程序的副本B来连接时可以实现通讯的(A和B是一样的).
但是,如果在A中,使用如下的代码去connect程序B的这个监听端口3555,发现发送不出去:
////////////////////////////////////////////////////////
struct sockaddr_in youraddr;
memset(&youraddr, 0, sizeof(youraddr));
youraddr.sin_family = AF_INET;
youraddr.sin_port = htons(3555);
youraddr.sin_addr.s_addr = inet_addr("192.168.1.111");//B的IP if (::connect(tcpsk, (LPSOCKADDR)&youraddr, sizeof(youraddr)) == SOCKET_ERROR)
{return MessageBox("发送不出去");}请问,这是为什么?
另外弄个socket去connect啊而且,listen中的socket也不能进行收发
你大概没弄明白socket通信原理
你开始监听后,即使对方主动连接你,你也并不是用监听的socket去和对方通信
而是新建一个socket来通信,监听socket还是继续在监听
我觉得如果楼主想实现一个程序,既可以客户端,又可以服务端的话,那就弄2个socket,一个去accept,一个去connect,而不要一个socket做2件事
——并不是通信两端一定要用同一个端口的
return FALSE; "你这句话不是设了地址重用了吗?应该是可以的,服务端用了3555端口后,你客户端的socket再bind这个端口时,失败了吗?如果没有失败,说明是可以的。。你测试下。
要是想实现传输的安全性
可以加个确认机制(和TCP一样的)
一,程序监听3555端口.
二,向别的机器的3555端口发送数据.假设一个是A机器,一个是B机器,都运行这个程序;
A和B各自监听自己的3555端口,
A和B都可以向对方的3555端口发送数据.
A和B都可以在3555端口有数据到达时,回复对方.
SO_REUSEADDR的含义是在短连接应用中,反复调用socket()、closesocket()时,不要一直换端口
再问:监听端口accept了之后,会分配一个新的端口来接收数据,那么,这个新端口在接收数据的过程中(比如大型文件),还能同时用这个新端口发送tcp连接吗?