當前位置:編程學習大全網 - 編程語言 - Linux C語言網絡編程問題!

Linux C語言網絡編程問題!

unsigned int dir(char * server) {

int sck;//套接字變量

struct sockaddr_in serv_adr; //遠程主機的地址

struct hostent *host; //指向遠程主機的指針

unsigned char databuf[FILEBUF_SIZE]; //數據

int bytes = 0, bytesread = 0; //字節數,讀取到的字節數

host = gethostbyname(server); //根據遠程主機的主機名,得到指向遠程主機的指針

if (host == (struct hostent *) NULL) { //如果得到指向遠程主機的指針失敗,報告錯誤,並返回

perror("gethostbyname failed");

return 0;

}memset(&serv_adr, 0, sizeof(serv_adr)); //初始化遠程主機的地址,結構體內所有成員清零

serv_adr.sin_family = AF_INET; //設置地址類型

memcpy(&serv_adr.sin_addr, host->h_addr, host->h_length);//取出指向遠程主機的指針中包含的地址信息,賦給遠程主機地址變量

serv_adr.sin_port = htons(SERVICE_PORT);//設置端口號,比如http服務對應80端口,ftp對應21端口

if ((sck = socket(AF_INET, SOCK_STREAM, 0)) < 0) { //如果建立TCP協議的套接字失敗,報告錯誤,並返回

perror("error on socket()");

return 0;

}

if (connect(sck, (struct sockaddr *)&serv_adr, sizeof(serv_adr)) < 0) {//如果使用該套接字連接到遠程主機失敗,報告錯誤,並返回

perror("error on connect()");

return 0;

}write(sck, "DI\n\n", 4); //連接成功,發送內容為"DI\n\n"的消息,遠程主機收到該消息,解析後生成目錄列表,並將目錄列表信息傳遞回來

printf("Remote directory listing:\n");//輸出提示信息“遠程主機正在生成目錄列表”

while ((bytes = read(sck, databuf, FILEBUF_SIZE)) > 0) { //從套接字的數據流中讀取遠程主機的返回信息(即目錄列表),每次讀取FILEBUF_SIZE個字節,直到全部讀取完畢

write(fileno(stdout), databuf, bytes);//將每次讀到的數據,輸出到標準輸出流(stdout),即屏幕上

bytesread += bytes;//接收到的字節數累加

}

close(sck); /* Close the socket */ //通信完成,關閉套接字,關閉連接

return bytesread; //返回讀取到的字節數(即遠程主機返回的信息的大小)

}

  • 上一篇:三菱除濕機的保養方法
  • 下一篇:cpu i幾 是什麽
  • copyright 2024編程學習大全網