Have you called WSAStartup? Here is an example using udp.
//http://www.district86.k12.il.us/central/activities/computerclub/Tutorials/Winsock/Lesson5.htm
// file name: wsudprcv.c
//
// description: A UDP packet receiver that waits for
// UDP packets on a specific port#include <winsock.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#pragma comment(lib,"ws2_32")
int main(int argc, int **argv)
{
WSADATA wsda; // Structure to store info
// returned from WSAStartup char szMessage[512];
int iMessageLen;
int ret; char szAddress[64];
int iPort; SOCKET s; // Our TCP socket handle
SOCKADDR_IN addr, // The local interface address
remote_addr; // The sender's address
int iRemoteAddrLen; // Contains the length of remte_addr, passed to recvfrom
/*
// Check arguments
if(argc != 2 ||
(argc==2 && strcmp((char *) &argv[1][0], "/?")==0))
{
printf("wsudprcv port\n");
printf(" port: the port the server should listen to\n");
exit(1);
} // Get the remote port
iPort = atoi((char *) &argv[1][0]); if(iPort<0 || iPort>65563)
{
printf("Invalid port number! (%s)\n", argv[2]);
exit(1);
}
*/
iPort = 2020;
iMessageLen = 512; // Set to the length of szMessage buffer // Load version 1.1 of Winsock WSAStartup(MAKEWORD(1,1), &wsda); // Create an UDP socket
printf("Creating socket...");
s = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); // Error?
if(s == SOCKET_ERROR)
{
printf("Error\nCall to socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); failed with:\n%d\n", WSAGetLastError());
exit(1);
} printf("OK\n"); // Fill in the interface information
printf("Binding socket...");
addr.sin_family = AF_INET;
addr.sin_port = htons(iPort);
addr.sin_addr.s_addr = INADDR_ANY; if(bind(s, (struct sockaddr *) &addr, sizeof(addr)) == SOCKET_ERROR)
{
printf("Error\nCall to bind(s, (struct sockaddr *) &addr, sizeof(addr)); failed with:\n%d\n", WSAGetLastError());
exit(1);
}
printf("OK\n"); // Ready to receive data printf("Waiting for packets (Press Ctrl-C to exit)..."); iRemoteAddrLen = sizeof(remote_addr);
ret = recvfrom(s, szMessage, iMessageLen, 0, (struct sockaddr *) &remote_addr, &iRemoteAddrLen); if(ret == SOCKET_ERROR)
{
printf("Error\nCall to recvfrom(s, szMessage, iMessageLen, 0, (struct sockaddr *) &remote_addr, &iRemoteAddrLen); failed with:\n%d\n", WSAGetLastError());
exit(1);
}
printf("Packet received\n"); iMessageLen = ret; // Length of the data received szMessage[iMessageLen] = '\0'; // Convert to cstring printf("\"%s\" received from %s\n", szMessage, inet_ntoa(remote_addr.sin_addr)); closesocket(s); WSACleanup();
getch();
return 0;
}
//http://www.district86.k12.il.us/central/activities/computerclub/Tutorials/Winsock/Lesson5.htm
// file name: wsudprcv.c
//
// description: A UDP packet receiver that waits for
// UDP packets on a specific port#include <winsock.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#pragma comment(lib,"ws2_32")
int main(int argc, int **argv)
{
WSADATA wsda; // Structure to store info
// returned from WSAStartup char szMessage[512];
int iMessageLen;
int ret; char szAddress[64];
int iPort; SOCKET s; // Our TCP socket handle
SOCKADDR_IN addr, // The local interface address
remote_addr; // The sender's address
int iRemoteAddrLen; // Contains the length of remte_addr, passed to recvfrom
/*
// Check arguments
if(argc != 2 ||
(argc==2 && strcmp((char *) &argv[1][0], "/?")==0))
{
printf("wsudprcv port\n");
printf(" port: the port the server should listen to\n");
exit(1);
} // Get the remote port
iPort = atoi((char *) &argv[1][0]); if(iPort<0 || iPort>65563)
{
printf("Invalid port number! (%s)\n", argv[2]);
exit(1);
}
*/
iPort = 2020;
iMessageLen = 512; // Set to the length of szMessage buffer // Load version 1.1 of Winsock WSAStartup(MAKEWORD(1,1), &wsda); // Create an UDP socket
printf("Creating socket...");
s = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); // Error?
if(s == SOCKET_ERROR)
{
printf("Error\nCall to socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); failed with:\n%d\n", WSAGetLastError());
exit(1);
} printf("OK\n"); // Fill in the interface information
printf("Binding socket...");
addr.sin_family = AF_INET;
addr.sin_port = htons(iPort);
addr.sin_addr.s_addr = INADDR_ANY; if(bind(s, (struct sockaddr *) &addr, sizeof(addr)) == SOCKET_ERROR)
{
printf("Error\nCall to bind(s, (struct sockaddr *) &addr, sizeof(addr)); failed with:\n%d\n", WSAGetLastError());
exit(1);
}
printf("OK\n"); // Ready to receive data printf("Waiting for packets (Press Ctrl-C to exit)..."); iRemoteAddrLen = sizeof(remote_addr);
ret = recvfrom(s, szMessage, iMessageLen, 0, (struct sockaddr *) &remote_addr, &iRemoteAddrLen); if(ret == SOCKET_ERROR)
{
printf("Error\nCall to recvfrom(s, szMessage, iMessageLen, 0, (struct sockaddr *) &remote_addr, &iRemoteAddrLen); failed with:\n%d\n", WSAGetLastError());
exit(1);
}
printf("Packet received\n"); iMessageLen = ret; // Length of the data received szMessage[iMessageLen] = '\0'; // Convert to cstring printf("\"%s\" received from %s\n", szMessage, inet_ntoa(remote_addr.sin_addr)); closesocket(s); WSACleanup();
getch();
return 0;
}
解决方案 »
- CreateWindow的类名问题
- 读取数据集的问题。懂的进来看看
- WIN SDK和MFC插入汇编代码问题
- 请问CSDN的论坛贴子有没有供批量下载的?我强烈见议班主能提供这个功能!我是我们广大菜鸟的愿望!
- 申请开发语言大版主
- 请问如何用package & deployment wizard工具打包vc++开发的控件以及相关文件?在线等待,急!!!!
- 请问:
- 200分!求电子书Modern C++ Design的中文版(C++设计新思维-范性编程与设计模式之应用)!!!!
- 关于序列化的问题
- 如何能在2000或nt4.0(不是98)下实现自动关机?有源代码的加分
- 为什么不能使用flexGrid控件
- 谁的拨号程序的源码?
1)如果你是用的UDP的协议,不能调用listen
面向联接的才需要调用listen
2)我有一个封好的UDP类,如果需要,告诉我你的email