基本上在離開大學之後,就再也沒有寫過C了,但因為之前有一點很簡單的東西想用c來試一下,所以就很快地寫了個C socket program出來作出測試,當然多年前在課堂上學過的東西, 現在己經忘記了, 雖然在網上很快就可以找到問題的所在,但還是在這裏記一下,留一個記錄比較好..
首先,需要加上以下的code:
用上這種寫法就可以保證了無論是否windows platform都能連繫上正確的library來呼叫socket 的function.
不過在windows 的環境下,在開socket前,是需要先call WSAStartup 的,否則call socket時便會連不上了
除了這一點外,還有WSAGetLastError 都是很有用的, 因為它是會把return 連絡不上的error code
sample program to check port on different protocol
#ifdef WIN32 #include <winsock2.h> #else #include <sys/socket.h> #include <sys/un.h> #endif
用上這種寫法就可以保證了無論是否windows platform都能連繫上正確的library來呼叫socket 的function.
不過在windows 的環境下,在開socket前,是需要先call WSAStartup 的,否則call socket時便會連不上了
WSADATA wsaData; int ws_result = WSAStartup(0x202, &wsaData);
除了這一點外,還有WSAGetLastError 都是很有用的, 因為它是會把return 連絡不上的error code
int e = WSAGetLastError();
sample program to check port on different protocol
#include <stdio.h>
#ifdef WIN32
#include <winsock2.h>
#else
#include <sys/socket.h>
#include <sys/un.h>
#endif
#define TESTHOST "x.x.x.x"
#define TESTPORT x
int main(int argc, char * argv[])
{
char buffer[8193];
int mysocket, len;
struct sockaddr_in dest;
WSADATA wsaData;
int ws_result = WSAStartup(0x202, &wsaData);
// TCP/UDP
if (argc > 1){
mysocket = socket(AF_INET, SOCK_STREAM, 0);
printf("Using SOCK_STREAM\r\n");
} else {
mysocket = socket(AF_INET, SOCK_DGRAM, 0);
printf("Using SOCK_DGRAM\r\n");
}
printf("mysocket = %d\r\n", mysocket);
memset(&dest, 0, sizeof(dest));
dest.sin_family = AF_INET;
dest.sin_addr.s_addr = inet_addr(TESTHOST);
dest.sin_port = htons(TESTPORT);
int result = connect(mysocket, (struct sockaddr *)&dest, sizeof(dest));
printf("host : %s\r\n",TESTHOST);
printf("port : %d\r\n", TESTPORT);
printf("connection result = %d\r\n", result);
int e = WSAGetLastError();
printf("due to = %d\r\n", e );
if (result >= 0){
printf("connected!\r\n");
} else {
printf("FAIL!!!!!\r\n");
}
close(mysocket);
WSACleanup();
}

0 回應:
Post a Comment