首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

winsock基本程序 客户端发送的第一个字符乱码解决方法

2012-04-25 
winsock基本程序 客户端发送的第一个字符乱码如题,在程序中Client中的send(sockClient,this is my fistso

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}; 

热点排行