一段很简单的代码:#include <WinSock2.h>
#include <iostream>
using namespace std;#pragma comment(lib, "ws2_32.lib")#define SERV_PORT 6000
#define BACKLOG 3int main()
{
SOCKET serv_socket = INVALID_SOCKET;
SOCKET new_socekt = INVALID_SOCKET;
WSADATA wsaData;
struct sockaddr_in server, client;
int err;
int sendlen; //the length of data sended
char buf[] = "Hello, welcom to my server!";
int serv_port = SERV_PORT;
//*******initiates use of Ws2_32.dll****************
//err = WSAStartup(WINSOCK_VERSION,&wsaData);
err = WSAStartup(MAKEWORD(2,2),&wsaData);
//assert(err==0);
if (err != 0)
{
cout << "Failed to load Winsock.\n";
return 0;
} //*******Create Socket****************
serv_socket = socket(AF_INET, SOCK_STREAM, 0);
if (serv_socket == INVALID_SOCKET)
{
cout << "socket() failed, error code: " << WSAGetLastError() << endl;
return 0;
} //*******server address****************
memset((char *)&server, 0, sizeof(struct sockaddr_in));
server.sin_family = AF_INET;
server.sin_port = htons(SERV_PORT);
server.sin_addr.s_addr = htonl(INADDR_ANY);
//*******Bind Socket with server address****************
err = bind(serv_socket, (struct sockaddr*)&server, sizeof(server));
if (err = SOCKET_ERROR)
{
cout << "bind() Failed, error code: " << WSAGetLastError() << endl;
closesocket(serv_socket);
WSACleanup();
return 0;
}以下可以省略了
VC2005下编译运行,始终是:bind() Failed, error code: 0也换过一些端口(1024以上的)。不知道错在哪里。
#include <iostream>
using namespace std;#pragma comment(lib, "ws2_32.lib")#define SERV_PORT 6000
#define BACKLOG 3int main()
{
SOCKET serv_socket = INVALID_SOCKET;
SOCKET new_socekt = INVALID_SOCKET;
WSADATA wsaData;
struct sockaddr_in server, client;
int err;
int sendlen; //the length of data sended
char buf[] = "Hello, welcom to my server!";
int serv_port = SERV_PORT;
//*******initiates use of Ws2_32.dll****************
//err = WSAStartup(WINSOCK_VERSION,&wsaData);
err = WSAStartup(MAKEWORD(2,2),&wsaData);
//assert(err==0);
if (err != 0)
{
cout << "Failed to load Winsock.\n";
return 0;
} //*******Create Socket****************
serv_socket = socket(AF_INET, SOCK_STREAM, 0);
if (serv_socket == INVALID_SOCKET)
{
cout << "socket() failed, error code: " << WSAGetLastError() << endl;
return 0;
} //*******server address****************
memset((char *)&server, 0, sizeof(struct sockaddr_in));
server.sin_family = AF_INET;
server.sin_port = htons(SERV_PORT);
server.sin_addr.s_addr = htonl(INADDR_ANY);
//*******Bind Socket with server address****************
err = bind(serv_socket, (struct sockaddr*)&server, sizeof(server));
if (err = SOCKET_ERROR)
{
cout << "bind() Failed, error code: " << WSAGetLastError() << endl;
closesocket(serv_socket);
WSACleanup();
return 0;
}以下可以省略了
VC2005下编译运行,始终是:bind() Failed, error code: 0也换过一些端口(1024以上的)。不知道错在哪里。
解决方案 »
- 静态文本中绘制时钟
- 麻烦各位大侠推荐一下图像处理的入门的书籍(最好有PDF档的)
- 我有海量数据,想到入数据库,请问各位大侠有什么高效的方法可以实现
- mfc 作为framework的优缺点
- 如何使主窗体始终最大化?(mfc)
- 大家帮忙看看,给个思路
- 程序在Win98下运行提示"找不到所需的.Dll文件-MSVCP60.Dll", 请问该怎么办??
- 请问,谁有编写 “向导式对话框”的源码???????
- vc toolbar 背景色是黑色,已经做了透明处理了,但是 和对话框底图不一致 怎么解决啊 朋友
- 如何编写DLL的SETUP程序
- 逻辑驱动器编号与分区表中的盘的对应方法?
- 连续显示指定路径下的多个BMP图片
if (err = SOCKET_ERROR) //错,err == SOCKET_ERROR
{
cout < < "bind() Failed, error code: " < < WSAGetLastError() < < endl;
closesocket(serv_socket);
WSACleanup();
return 0;
}
这种写法,条件无论什么时候都会成立,判断相等要用==
判断bind是否成功一般是判断返回值是否为0。
if (err = SOCKET_ERROR) //错,err == SOCKET_ERROR群众的眼光是雪亮的