基于TCP面向连接的socket编程。运行出错,一直出现 “烫”字。用的vs2010

#include <winsock2.h>
#include <stdio.h>
//服务器端程序
void main()
{
WORD wVersionRequested;
WSADATA wsaData;
int err;

wVersionRequested = MAKEWORD( 1,1 );
//加载Ws2_32.dll
err = WSAStartup( wVersionRequested, &wsaData );
if ( err != 0 ) {
return;
}

if ( LOBYTE( wsaData.wVersion ) != 1 ||
HIBYTE( wsaData.wVersion ) != 1) {
WSACleanup( );
return;
}

SOCKET SocketSrv=socket(AF_INET,SOCK_STREAM,0 );//step1 建立套接字
SOCKADDR_IN AddrSrv;
AddrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);//网络字节序
AddrSrv.sin_family=AF_INET;
AddrSrv.sin_port=htons(6000);//端口号两个字节
bind(SocketSrv,(SOCKADDR *)&AddrSrv,sizeof(SOCKADDR));//step2 绑定到套接字
listen(SocketSrv,5);//step3 监听连接请求 5为队列长度
SOCKADDR_IN AddrClient;
int len=sizeof(SOCKADDR);//必须赋初值
//服务器端程序循环运行
while(1)
{
SOCKET ScoketConn=accept(SocketSrv, (SOCKADDR*)&AddrClient, &len);//step4 接受请求 AddrClient接收连接请求方的信息
char SendBuf[100];
sprintf(SendBuf,"Wellcome! Connect from %s Success!",inet_ntoa(AddrClient.sin_addr));
send(ScoketConn,SendBuf,strlen(SendBuf)+1,0);//step5 发送数据用连接的套接字不能用处于监听状态的套接字
char RecvBuf[100];
recv(ScoketConn,RecvBuf,100,0);//step5 接收数据
printf("%s\n",RecvBuf);
closesocket(ScoketConn);
}
//实际上还需做以下操作 但上述是死循环因此没有执行下述操作
//closesocket(SocketSrv);//关闭套接字
// WSACleanup();//终止库引用
}

#include <Winsock2.h>
#include <stdio.h>
//客户端程序
void main()
{
WORD wVersionRequested;
WSADATA wsaData;
int err;

wVersionRequested = MAKEWORD( 1, 1 );

err = WSAStartup( wVersionRequested, &wsaData );
if ( err != 0 ) {
return;
}
if ( LOBYTE( wsaData.wVersion ) != 1 ||
HIBYTE( wsaData.wVersion ) != 1) {
WSACleanup( );
return;
}
SOCKET SocketClient=socket(AF_INET,SOCK_STREAM,0 );//step1 建立套接字
SOCKADDR_IN AddrSrv;
AddrSrv.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");//本地回路地址
AddrSrv.sin_family=AF_INET;
AddrSrv.sin_port=htons(6000);
connect(SocketClient,(SOCKADDR *)&AddrSrv,sizeof(SOCKADDR));//step2 连接请求
char RecvBuf[100];
recv(SocketClient,RecvBuf,100,0);//接收服务器数据
printf("%s\n",RecvBuf);
char sendbuf[100];
sprintf(sendbuf,"this is from %s","liming");
send(SocketClient,sendbuf,strlen(sendbuf)+1,0);//发送数据
closesocket(SocketClient);//关闭套接字 释放资源
WSACleanup();//终止套接字库的引用
}

第1个回答  2012-06-12
char RecvBuf[100];
recv(SocketClient,RecvBuf,100,0);//接收服务器数据
printf("%s\n",RecvBuf);
也许没有接收到数据,所以在printf()输出时输出了没有初始化的字串。
你可以试一下:
char RecvBuf[100]={"\0"};
recv(SocketClient,RecvBuf,100,0);//接收服务器数据
printf("%s\n",RecvBuf);
第2个回答  2012-06-11
char RecvBuf[100];
recv(ScoketConn,RecvBuf,100,0);//step5 接收数据
printf("%s\n",RecvBuf);
问题出在这里,字符串的显示,字符串末尾必须以‘\0'结束,否则显示会出错。
这样试试:
char RecvBuf[101];
recv(ScoketConn,RecvBuf,100,0);//step5 接收数据
RecvBuf[100] = '\0';
printf("%s\n",RecvBuf);追问

还是一直 输出“烫”字

本回答被网友采纳
第3个回答  2012-06-11
recv(ScoketConn,RecvBuf,100,0);//step5 接收数据
两种修改办法:
1,memset(buff,0,sizeof(buff)); 将buff全部置为0
2,int n = recv(...); buff[n] = '\0';追问

试过 不行

第4个回答  2012-12-07
你用的是两台电脑么,如果是,请更换客户端IP地址为服务器端IP!
第5个回答  2016-11-08
数组接收的时候,后面是空的,等于说数组要接受十个,你只收到九个,就会有烫。
相似回答