socket in C (windows platform)

基本上在離開大學之後,就再也沒有寫過C了,但因為之前有一點很簡單的東西想用c來試一下,所以就很快地寫了個C socket program出來作出測試,當然多年前在課堂上學過的東西, 現在己經忘記了, 雖然在網上很快就可以找到問題的所在,但還是在這裏記一下,留一個記錄比較好..

首先,需要加上以下的code:
#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();
}


Edit hosts file at Mac

在windows 要修改hosts file 時很容易地, 但是來到了Mac, 單單在terminal 中用vi 去修改/etc/hosts 是不能儲存的, 我們需要用到以下的command:

sudo vim /etc/hosts

當然修改好後就要用 `:wq` 來離開vi 吧


鏡頭入手 - EFS 55 - 250 mm f/4-5.6 IS II

上個月,為了去旅行而作出準備,終於入了第三支鏡頭 - EFS 55 - 250 mm f/4-5.6 IS II

計上這支新鏡頭及上kit set 的18-55 及早前所買的50 f1.8, 就是人稱的Canon的窮人三寶呢, 終於隻齊了它們呢...

250MM時鏡頭伸出來的樣子
55MM時鏡頭的樣子



teradata escape special character in like statement

由於_% 在like statement 中是有特別的作用, 所以如果要在尋覓中指定它們的出現,我地是需要把放一個escape char 在它們之前的,而在TD入面這一個escape char 是可以自行定義的, 方法如下.

WHERE STRING LIKE '%#_%' ESCAPE '#'

其中'#'就是定義的escape char


韓國旅遊 - Wifi

隨著科技的進步,現在當你能上網的時候,你絕對可以做到好多的事情呢,所以去旅行如果也能隨時隨地的連接上網是真的很方便的呢, 特別是你可以利用到地圖apps找尋要去的地方時,真是可以減少迷路的機會.

在4月12日到16日的期間我就和太太到了韓國旅遊,韓國的機場內就有幾間不同的wifi device 租借服務,不過太部份也是要在出發前數天預約的,如果唔係可能會借不到呢, 不過如果好似我咁出發前唔記得左預約,就可以選擇LG U+ (它沒有得網上預約全部也是walkin的呢,租借點在Gate 5同6之間)



租借的內容有當然有主體的wifi 裝設,也少不了叉電線,也有簡單說明書,而且還有一個袋裝晒佢地,真係幾方便的.

講番價錢,如果是租借五天以上是有discount的呢, 只需3300won一天 (以現在兌換率計數才23港元一天吧,很平呢), 五天或以下就要5500won一天(不用40元一天), 價錢也很實惠 :) , 不過雖然係咁平, 但係它的cover絕對不差呢, 速度方面也可以接受呢,所以可以說性價比不錯呢


講完價錢,就講下個device 可以用到幾耐, 基本上如果是叉滿電的話太約可以用開到6-7小時,當然我的用途只是一般上網查下地圖,facebook,whatsapp一下,如果是用來打機,睇片的話我相信就未必可以到咁耐的了,不過現在流動電源如此的普及,都是有方法可以把使用時間大大的延長呢


整體而言,我對這隻LG U+的wifi 也幾滿意呢, 如果將來會再一次去韓國,應該也是會選用它吧!