基本上在離開大學之後,就再也沒有寫過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