WIN32局域网聊天IP连接成功信息传递不了

qq_29313157 2018-07-21 12:23:05
这是服务端的接收代码:
case FD_READ:
{
szpRevcBuf = new TCHAR[MAX_LEN];
tempBuf = new TCHAR[MAX_LEN];
recv(sockConn, szpRevcBuf, strlen(szpRevcBuf)+ 1, 0);
wsprintf(tempBuf, "客户端: %s", szpRevcBuf);
SendMessage(hShow, LB_ADDSTRING, 0, (LPARAM)tempBuf);
delete []szpRevcBuf;
delete []tempBuf;
}
break;


这是客户端的发送代码
else if(LOWORD(wParam) == IDC_BTN_SEND)
{
szpSendBuf = new TCHAR[1000];
SendMessage(hWrite, WM_GETTEXT, (WPARAM)(strlen(szpSendBuf)+ 1), (LPARAM)szpSendBuf);
if(0 == GetWindowTextLength(hWrite))
{
MessageBox(hwnd, TEXT("不能发送空消息!"), TEXT("Error"), MB_OK);
}
else
{
//发送消息
send(sockClient, szpSendBuf, strlen(szpSendBuf) +1, 0);
tempBuf = new TCHAR[130];
wsprintf(tempBuf, "客户端: %s", szpSendBuf);
SendMessage(hShow, LB_ADDSTRING, 0, (LPARAM)tempBuf);
delete []tempBuf;
}
delete []szpSendBuf;
}
客户端服务端的IP地址都已经连起了,但是信息却传递不过来,请dalao们帮我分析一下
...全文
316 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
yiyefangzhou24 2018-07-25
  • 打赏
  • 举报
回复
服务端
#include <stdio.h>
#include <winsock2.h>
#pragma comment (lib, "ws2_32.lib") //加载 ws2_32.dll

int main(){
//初始化 DLL
WSADATA wsaData;
WSAStartup( MAKEWORD(2, 2), &wsaData);

//创建套接字
SOCKET servSock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);

//绑定套接字
sockaddr_in sockAddr;
memset(&sockAddr, 0, sizeof(sockAddr)); //每个字节都用0填充
sockAddr.sin_family = PF_INET; //使用IPv4地址
sockAddr.sin_addr.s_addr = inet_addr("127.0.0.1"); //具体的IP地址
sockAddr.sin_port = htons(1234); //端口
bind(servSock, (SOCKADDR*)&sockAddr, sizeof(SOCKADDR));

//进入监听状态
listen(servSock, 20);

//接收客户端请求
SOCKADDR clntAddr;
int nSize = sizeof(SOCKADDR);
SOCKET clntSock = accept(servSock, (SOCKADDR*)&clntAddr, &nSize);

//向客户端发送数据
char *str = "Hello World!";
send(clntSock, str, strlen(str)+sizeof(char), NULL);

//关闭套接字
closesocket(clntSock);
closesocket(servSock);

//终止 DLL 的使用
WSACleanup();

return 0;
}

客户端
#include <stdio.h>
#include <stdlib.h>
#include <WinSock2.h>
#pragma comment(lib, "ws2_32.lib") //加载 ws2_32.dll

int main(){
//初始化DLL
WSADATA wsaData;
WSAStartup(MAKEWORD(2, 2), &wsaData);

//创建套接字
SOCKET sock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);

//向服务器发起请求
sockaddr_in sockAddr;
memset(&sockAddr, 0, sizeof(sockAddr)); //每个字节都用0填充
sockAddr.sin_family = PF_INET;
sockAddr.sin_addr.s_addr = inet_addr("127.0.0.1");
sockAddr.sin_port = htons(1234);
connect(sock, (SOCKADDR*)&sockAddr, sizeof(SOCKADDR));

//接收服务器传回的数据
char szBuffer[MAXBYTE] = {0};
recv(sock, szBuffer, MAXBYTE, NULL);

//输出接收到的数据
printf("Message form server: %s\n", szBuffer);

//关闭套接字
closesocket(sock);

//终止使用 DLL
WSACleanup();

system("pause");
return 0;
}
qq_29313157 2018-07-25
  • 打赏
  • 举报
回复
非常感谢了
yiyefangzhou24 2018-07-23
  • 打赏
  • 举报
回复
单步调试一下szpSendBuf有没有获取到值
qq_29313157 2018-07-23
  • 打赏
  • 举报
回复
引用 6 楼 yiyefangzhou24 的回复:
单步调试一下szpSendBuf有没有获取到值


取到了的,我可能知道哪出问题了,我没设置监听器, receive函数没起到作用
qq_29313157 2018-07-22
  • 打赏
  • 举报
回复
引用 1 楼 vnvlyp 的回复:
recv(sockConn, szpRevcBuf, strlen(szpRevcBuf)+ 1, 0);
//改成
recv(sockConn, szpRevcBuf, sizeof(szpRevcBuf), 0);

改了不太行 emm
qq_29313157 2018-07-22
  • 打赏
  • 举报
回复
引用 2 楼 yiyefangzhou24 的回复:
恕我眼拙,你的发送函数send在什么地方调用的?单步调试一下,怎么收不到,recv阻塞还是返回错误,返回错误的话用WSAGetLastError()看看返回错误代码

也并没有返回错误。。
qq_29313157 2018-07-22
  • 打赏
  • 举报
回复
send是在command里用的呀,,就是点击发送按钮之后的操作
yiyefangzhou24 2018-07-22
  • 打赏
  • 举报
回复
恕我眼拙,你的发送函数send在什么地方调用的?单步调试一下,怎么收不到,recv阻塞还是返回错误,返回错误的话用WSAGetLastError()看看返回错误代码
vnvlyp 2018-07-21
  • 打赏
  • 举报
回复
recv(sockConn, szpRevcBuf, strlen(szpRevcBuf)+ 1, 0);
//改成
recv(sockConn, szpRevcBuf, sizeof(szpRevcBuf), 0);

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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