資源簡介
my_socket是將文件從windows傳輸到linux,my_socket_verify是將linux下的文件傳到windows(因為我只寫了單向的,verify只是做了一個驗證而已)

代碼片段和文件信息
/*************************************************************************?
????>?File?Name:?main.c?(/socket?client)
????>?Author:?Clara_Dong
????>?E-mail:?947641297@qq.com??
????>?Created?Time:?2018年03月10日?星期六?21時15分43秒?
?************************************************************************/??
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include??
void??error(const?char?*msg)//定義一個指向字符常量的指針msg,*msg的值為const,不能修改
{
????perror(msg);//將錯誤信息輸給msg???錯誤輸出函數
????exit(0);//程序正常退出
}
int?main(int?argc?char?*argv[])
{
int?sockfdportnon=-1;
struct?sockaddr_in?serv_addr;//sockaddr_in結構體把port和addr?分開儲存在兩個變量中
struct?hostent?*server;//hostent是host?entry的縮寫hostent結構體
char?buffer[256];
????if?(argc?3)?{
???????fprintf(stderr“usage?%s?hostname?port\n“?argv[0]);
???????exit(0);
????}
????portno?=?atoi(argv[2]);
//建立socket套字
????sockfd?=?socket(AF_INET?SOCK_STREAM?0);////返回sockfdsockfd是描述符唯一標識一個socket
//AF_INET?是socket的協議族:IPV4;SOCK_STREAM是socket類型;0是指的是protocol指定協議,當protocol為0時,會自動選擇type類型對應的默認協議
????if?(sockfd?0)?
????????error(“ERROR?opening?socket“);
????server?=?gethostbyname(argv[1]);
????if?(server?==?NULL)?{
????????fprintf(stderr“ERROR?no?such?host\n“);
????????exit(0);
????}
????bzero((char?*)?&serv_addr?sizeof(serv_addr));
//初始化ip和port
????serv_addr.sin_family?=?AF_INET;
????bcopy((char?*)server->h_addr(char?*)&serv_addr.sin_addr.s_addrserver->h_length);
????serv_addr.sin_port?=?htons(portno);//htons是將整形變量從主機字節順序變成網絡字節順序
//connect將socket套接字描述符與服務器端的ip+port聯系起來
//調用connect函數
????if?(connect(sockfd(struct?sockaddr?*)?&serv_addrsizeof(serv_addr))?0)?
????????error(“ERROR?connecting“);
//建立連接
printf(“Connecting...“);
FILE*fp=fopen(“data.txt““rb“);//以二進制方式打開文件
if(fp?==?NULL){//檢驗data.txt文件是否存在
printf(“Cannot?open?the?file?check?out?please.“);
system(“pause“);
exit(0);
}
bzero(buffer256);
int?nCount;
while((nCount=fread(buffer1256fp))>0){//fread讀取成功返回值為實際讀回的數據個數(單位為Byte)
n=write(sockfdbuffernCount);
}
//發送信息
????//n?=?write(sockfdbufferstrlen(buffer));//將buffer里面的整個內容都寫到sockfd里面去
????if?(n?0)?
?????????error(“ERROR?writing?to?socket“);
????bzero(buffer256);
//接收回復
????n?=?read(sockfdbuffer255);
????if?(n?0)?
?????????error(“ERROR?reading?from?socket“);
????printf(“%s\n“buffer);
fclose(fp);
//確認通信后關閉socket
????close(sockfd);
????return?0;
}
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2018-03-11?09:18??my_socket\
?????目錄???????????0??2018-03-10?21:20??my_socket\client\
?????文件?????????292??2017-10-25?16:46??my_socket\client\Makefile
?????文件????????4750??2018-03-10?15:48??my_socket\client\data.txt
?????文件????????3043??2018-03-10?21:16??my_socket\client\main.c
?????文件????????2693??2018-03-10?21:20??my_socket\client\main.o
?????文件???????71150??2018-03-10?21:20??my_socket\client\socket_client.exe
?????目錄???????????0??2018-03-11?09:08??my_socket\server\
?????文件?????????539??2017-10-25?16:46??my_socket\server\Makefile
?????文件????????2234??2018-03-11?09:07??my_socket\server\main.c
?????文件????????7452??2018-03-10?21:20??my_socket\server\main.o
?????文件???????11886??2018-03-10?21:20??my_socket\server\socket_server
?????目錄???????????0??2018-03-10?18:17??my_socket_verify\
?????目錄???????????0??2018-03-10?21:23??my_socket_verify\client\
?????文件?????????292??2017-10-25?16:46??my_socket_verify\client\Makefile
?????文件????????2778??2018-03-10?21:17??my_socket_verify\client\main.c
?????文件????????2511??2018-03-10?21:23??my_socket_verify\client\main.o
?????文件????????4750??2018-03-10?21:28??my_socket_verify\client\recdata.txt
?????文件???????70766??2018-03-10?21:23??my_socket_verify\client\socket_client.exe
?????目錄???????????0??2018-03-10?21:24??my_socket_verify\server\
?????文件?????????539??2017-10-25?16:46??my_socket_verify\server\Makefile
?????文件????????2269??2018-03-10?21:17??my_socket_verify\server\main.c
?????文件????????7480??2018-03-10?21:24??my_socket_verify\server\main.o
?????文件???????11915??2018-03-10?21:24??my_socket_verify\server\socket_server
評論
共有 條評論