winsock基本程序 客户端发送的第一个字符乱码
如题,在程序中Client中的
send(sockClient,"this is my fistsock program.",strlen("this is my fistsock program.")+1,0)
发送this is my fistsock program 中的字符t(也就是第一个字母)是乱码 而且是中文乱码……
请问那点除了问题。谢谢
server.cpp程序
- C/C++ code
// Server.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include <stdio.h>#include <winsock2.h>#pragma comment(lib, "ws2_32.lib")void main() { WORD wVersionRequested; WSADATA wsaData; int err; wVersionRequested = MAKEWORD(1,1); //1.1版本的套接字 err = WSAStartup(wVersionRequested,&wsaData); if(err!=0) { return; } if(LOBYTE(wsaData.wVersion) != 1 || HIBYTE(wsaData.wVersion) != 1) { WSACleanup(); return; } //如果不是1.1的则退出 // 建立socket SOCKET server; server = socket( AF_INET, SOCK_STREAM, IPPROTO_TCP ); if ( server == INVALID_SOCKET ) //问题一,什么时候会调用错误? { printf( "Error at socket(): %ld\n", WSAGetLastError() ); WSACleanup(); return; } // 绑定socket sockaddr_in service; //表示地址 /*sockaddr_in 函数的表述 typedef struct sockaddr_in { ADDRESS_FAMILY sin_family; USHORT sin_port; IN_ADDR sin_addr; CHAR sin_zero[8]; } SOCKADDR_IN, *PSOCKADDR_IN; */ service.sin_family = AF_INET; service.sin_addr.s_addr = htonl(INADDR_ANY); //service.sin_addr.s_addr = inet_addr( "127.0.0.1" ); service.sin_port = htons( 6000 );//制定服务器端口 1024以上的端口号 if ( bind( server, (SOCKADDR*) &service, sizeof(service) ) == SOCKET_ERROR ) { printf( "bind() failed.\n" ); closesocket(server); return; } // 监听 socket if ( listen( server, 5 ) == SOCKET_ERROR )/ printf( "Error listening on socket.\n"); // 接受连接 //SOCKET AcceptSocket; printf( "Waiting for a client to connect...\n" ); sockaddr_in addrClient; int len = sizeof(SOCKADDR); while (1) {/* AcceptSocket = SOCKET_ERROR; while ( AcceptSocket == SOCKET_ERROR ) { AcceptSocket = accept( server, NULL, NULL ); } printf( "Client Connected.\n"); server = AcceptSocket; break; }*/ // 发送接受数据 SOCKET sockConn = accept(server,(SOCKADDR*)&addrClient,&len); char sendbuf[100];// = "Server: Sending Data."; printf(sendbuf,"Welcome%s to set data",inet_ntoa(addrClient.sin_addr)); send(sockConn,sendbuf,strlen(sendbuf)+1,0);//多发送一个 增加一个/0结尾 char recvbuf[100]; recv(sockConn,recvbuf,100,0); printf("%s\n",recvbuf); /* int bytesSent; int bytesRecv = SOCKET_ERROR; char sendbuf[100] = "Server: Sending Data."; char recvbuf[32] = ""; bytesRecv = recv( server, recvbuf, 32, 0 ); printf( "Bytes Recv: %ld\n", bytesRecv ); bytesSent = send( server, sendbuf, strlen(sendbuf), 0 ); printf( "Bytes Sent: %ld\n", bytesSent ); return; */ closesocket(sockConn); }}Client.cpp
- C/C++ code
void main() { WORD wVersionRequested; WSADATA wsaData; int err; wVersionRequested = MAKEWORD( 1, 1 );//版本号1.1 //1.加载套接字库 err = WSAStartup( wVersionRequested, &wsaData ); if ( err != 0 ) { return; }//endof if //判断是否我们请求的winsocket版本,如果不是 //则调用WSACleanup终止winsocket的使用并返回 if ( LOBYTE( wsaData.wVersion ) != 1 ||HIBYTE( wsaData.wVersion ) != 1 ) { WSACleanup( ); return; }///endof if //2.创建套接字 SOCKET sockClient = socket (AF_INET, SOCK_STREAM, IPPROTO_TCP); //3.连接服务器端,无须绑定 SOCKADDR_IN addrSrv; addrSrv.sin_addr.S_un.S_addr = inet_addr("127.0.0.1"); //设定服务器端IP地址,"127.0.0.1"是本地回路地址 //不管本地主机上有没有网卡,都可以用这个IP测试网络 addrSrv.sin_family = AF_INET; addrSrv.sin_port = htons(6000); //端口号要与服务器端保持一致 connect(sockClient,(SOCKADDR *)&addrSrv,sizeof(SOCKADDR)); //4.接收服务器端发送的数据,并且向服务器端发送数据 char recvBuf[100]; recv(sockClient,recvBuf,100,0); printf("%s \n", recvBuf); send(sockClient,"this is my fistsock program.",strlen("this is my fistsock program.")+1,0); //5.关闭套接字,释放资源,并且终止对套接字库的使用 closesocket(sockClient); WSACleanup(); }//endof main()
[解决办法]
应该是数组初始化的问题 是不是全是烫。。。。。
[解决办法]
- C/C++ code
char recvbuf[100]={0};