TCP程序客户端连接不上服务器的解决办法

这几天突然想运行之前用Qt写的几个tcp小程序,但是发现客户端和服务器连接不上了,我自己又写了一遍程序,发现还是连接不上。这个问题困扰了我好几天。然后我就想看看自己用的端口号有没有被监听到。于是就运行了自己的服务器,然后在控制台下输入

netstat -a

发现自己用的端口号出现了两次。


然后我停止运行服务器再输入netstat -a  自己写的端口只出现了一次,说明之前的8888端口号已经被占用了,所以我就改了一个端口号,再运行程序就行了。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
好的,你可以参考以下代码实现: 1. 在MFC框架中,可以使用CWnd::SetTimer函数来启动定时器。例如,在窗口的OnCreate函数中添加以下代码: ``` SetTimer(1, 1000, NULL); // 每隔1秒触发一次定时器,定时器ID为1 ``` 2. 在定时器消息响应函数中,创建TCP客户端连接。例如,可以使用Winsock API中的socket, connect等函数,实现TCP客户端连接。 ``` void CYourWnd::OnTimer(UINT_PTR nIDEvent) { if (nIDEvent == 1) // 判断是哪个定时器 { KillTimer(1); // 先停止定时器,避免重复触发 // 创建客户端socket SOCKET clientSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); if (clientSocket == INVALID_SOCKET) { // 处理socket创建失败的情况 return; } // 设置服务器地址和端口 SOCKADDR_IN serverAddr; serverAddr.sin_family = AF_INET; serverAddr.sin_port = htons(8888); // 假设服务器端口为8888 serverAddr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1"); // 假设服务器IP为127.0.0.1 // 连接服务器 int ret = connect(clientSocket, (SOCKADDR*)&serverAddr, sizeof(serverAddr)); if (ret == SOCKET_ERROR) { // 处理连接失败的情况 closesocket(clientSocket); SetTimer(1, 1000, NULL); // 重新启动定时器,继续等待连接 return; } // 处理连接成功的情况 // TODO: 发送和接收数据 closesocket(clientSocket); } CWnd::OnTimer(nIDEvent); } ``` 注意,上述代码只是一个简单的示例,实际应用中需要根据具体需求进行修改和完善。同时,需要注意TCP连接的建立可能会比较耗时,如果频繁地启动和停止定时器可能会影响程序的性能。因此,建议在实现中加入必要的优化措施,如增加连接重试次数、设置连接超时时间等。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值