2009年10月19日 星期一

winsck example

底下是一個簡單的winsck範例
之前雖然在linux上寫過不過為了測試這個也是花了不少時間
環境:win xp, visual studio express
基本上寫程式這種東西....幾個簡單的東西try通之後,靠的就是想像力和組織能力啦

雖說萬事起頭難,不過東拼西湊完之後的測試,花的時間也是不容小覷


#include
#include
#include
#include

#pragma comment(lib, "Wsock32.lib")

#define MAXLINE 1024


int main() {
SOCKET recv_sd, send_sd;
int cli_len, n, sendtoRet, bindRet, errno;
char str[MAXLINE];

struct sockaddr_in recv_addr, send_addr;

WSADATA wsadata;

if (WSAStartup(0x101, (LPWSADATA) &wsadata) != 0) {
fprintf(stderr, "echo_serv: can't use WinSock DLL\n");
exit(1);
}

if ( (recv_sd = socket(AF_INET, SOCK_RAW, 0)) == SOCKET_ERROR) {
fprintf(stderr, "echo_serv: can't open TCP socket\n");
exit(1);
}

if ( (send_sd = socket(AF_INET, SOCK_DGRAM, 0)) == SOCKET_ERROR) {
fprintf(stderr, "echo_serv: can't open UCP socket\n");
exit(1);
}

// set dst address to broadcast
memset(&send_addr, 0, sizeof send_addr);
send_addr.sin_family = AF_INET;
send_addr.sin_port = 1000;
bindRet = bind(send_sd, (struct sockaddr *)&send_addr, sizeof send_addr);

setsockopt( send_sd, SOL_SOCKET, SO_BROADCAST, "TRUE", 4 );

memset(&send_addr, 0, sizeof send_addr);
send_addr.sin_family = AF_INET;
send_addr.sin_port = 68;
send_addr.sin_addr.s_addr = inet_addr("255.255.255.255");

strcpy_s(str, 12, "Hello World");
//while(1)
sendtoRet = sendto(send_sd, str, 12, 0, (struct sockaddr *)&send_addr, sizeof send_addr);

printf("%d", WSAGetLastError());

closesocket(recv_sd);
closesocket(send_sd);

return 0;
}

沒有留言:

張貼留言