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

winsock编程的有关问题!小弟我入门的第一个小程序就卡住了,在线求教了

2012-02-24 
winsock编程的问题!我入门的第一个小程序就卡住了,在线求教了!#include stdafx.h#include stdio.h#inc

winsock编程的问题!我入门的第一个小程序就卡住了,在线求教了!
#include "stdafx.h"
#include <stdio.h>
#include <WinSock.h>
int main(int argc,char* argv[])
{
WORD wVersion;
WSADATA wsaData;
int err;
//生成版本号
wVersion=MAKEWORD(1,1);
//初始化Windows socket
err=WSAStartup(wVersion,&wsaData);

if(err!=0)
return 0;
//建立流式套接字
SOCKET listenSocket = socket(AF_INET,SOCK_STREAM,0);

sockaddr_in addr;
int nSocketErr;
addr.sin_family = AF_INET;
addr.sin_addr.S_addr = htonl(INADDR_ANY);
//设定监听端口号
addr.sin_port = htons(5001);
//绑定套接字
if(bind(listenSocket,(struct sockaddr*)&addr,
sizeof(addr))==SOCKET_ERROR)
nSocketErr = WSAGetLastError();
//将套接字设置成监听状态
if(listen(listenSocket,5) == SOCKET_ERROR)
nSocketErr=WSAGetLastError();
printf("服务器正在监听。。。\n");

//等待服务器的连接请求
SOCKET connectSocket=accept(listenSocket,NULL,NULL);
if (connectSocket==INVALID_SOCKET)
{
printf("解说错误\n");
nSocketErr = WSAGetLastError();
}
else
{
//有客户连接请求被成功接收
char buf[1024];
memset(buf,0,sizeof(char)*1024);
//接收客户端传来的数据
int n= recv(connectSocket,buf,1024,MSG_PEEK);
if(n>0)
printf("服务器已经接收%d个字符:%s",n,buf);
}
closesocket(listenSocket);
closesocket(connectSocket);
getchar();
return 0;
}

[解决办法]
应该是 addr.sin_addr.s_addr 或者 addr.sin_addr.S_un.S_addr

C/C++ code
struct in_addr {        union {                struct { u_char s_b1,s_b2,s_b3,s_b4; } S_un_b;                struct { u_short s_w1,s_w2; } S_un_w;                u_long S_addr;        } S_un;#define s_addr  S_un.S_addr                                /* can be used for most tcp & ip code */#define s_host  S_un.S_un_b.s_b2                                /* host on imp */#define s_net   S_un.S_un_b.s_b1                                /* network */#define s_imp   S_un.S_un_w.s_w2                                /* imp */#define s_impno S_un.S_un_b.s_b4                                /* imp # */#define s_lh    S_un.S_un_b.s_b3                                /* logical host */};struct sockaddr_in {        short   sin_family;        u_short sin_port;        struct  in_addr sin_addr;        char    sin_zero[8];};
[解决办法]
addr.sin_addr.s_addr

S应该小写。
[解决办法]
// TEST51.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include "TEST51.h"

#include <WINSOCK2.H>
#pragma comment(lib, "ws2_32.lib")

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// The one and only application object

CWinApp theApp;

using namespace std;

int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
int nRetCode = 0;

// initialize MFC and print and error on failure
if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0))
{
// TODO: change error code to suit your needs
cerr << _T("Fatal Error: MFC initialization failed") << endl;
nRetCode = 1;
}
else
{
// // TODO: code your application's behavior here.
// CString strHello;
// strHello.LoadString(IDS_HELLO);
// cout << (LPCTSTR)strHello << endl;

WORD wVersion;
WSADATA wsaData;
int err;
//生成版本号
wVersion=MAKEWORD(1,1);


//初始化Windows socket
err=WSAStartup(wVersion,&wsaData);

if(err!=0)
return 0;
//建立流式套接字
SOCKET listenSocket = socket(AF_INET,SOCK_STREAM,0);

sockaddr_in addr;
int nSocketErr;
addr.sin_family = AF_INET;
addr.sin_addr.s_addr = htonl(INADDR_ANY);
//设定监听端口号
addr.sin_port = htons(5001);
//绑定套接字
if(bind(listenSocket,(struct sockaddr*)&addr,
sizeof(addr))==SOCKET_ERROR)
nSocketErr = WSAGetLastError();
//将套接字设置成监听状态
if(listen(listenSocket,5) == SOCKET_ERROR)
nSocketErr=WSAGetLastError();
printf("服务器正在监听。。。\n");

//等待服务器的连接请求
SOCKET connectSocket=accept(listenSocket,NULL,NULL);
if (connectSocket==INVALID_SOCKET)
{
printf("解说错误\n");
nSocketErr = WSAGetLastError();
}
else
{
//有客户连接请求被成功接收
char buf[1024];
memset(buf,0,sizeof(char)*1024);
//接收客户端传来的数据
int n= recv(connectSocket,buf,1024,MSG_PEEK);
if(n>0)
printf("服务器已经接收%d个字符:%s",n,buf);
}
closesocket(listenSocket);
closesocket(connectSocket);
getchar();
return 0;

}

return nRetCode;
}


/*以代码上编译通过*/

热点排行