兩段程式:可用於開發板和主機之間的資料傳輸,很管用!! //
// file_client.c檔案傳輸客戶端程式示例
////
本檔案是客戶機的**
#include // for sockaddr_in
#include // for socket
#include // for socket
#include // for printf
#include // for exit
#include // for bzero
/*#include
#include
#include
#include
*/#define hello_world_server_port 6666
#define buffer_size 1024
#define file_name_max_size 512
int main(int argc, char **argv)
//設定乙個
socket
位址結構
client_addr,
代表客戶機
internet
位址,
埠
struct sockaddr_in client_addr;
bzero(&client_addr,sizeof(client_addr)); //
把一段記憶體區的內容全部設定為0
client_addr.sin_family = af_inet; //internet
協議族
client_addr.sin_addr.s_addr = htons(inaddr_any);//inaddr_any
表示自動獲取本機位址
client_addr.sin_port = htons(0); //0
表示讓系統自動分配乙個空閒埠
//建立用於
internet
的流協議
(tcp)socket,
用client_socket
代表客戶機
socket
int client_socket = socket(af_inet,sock_stream,0);
if( client_socket < 0)
//把客戶機的
socket
和客戶機的
socket
位址結構聯絡起來
if( bind(client_socket,(struct sockaddr*)&client_addr,sizeof(client_addr)))
//設定乙個
socket
位址結構
server_addr,
代表伺服器的
internet
位址,
埠
struct sockaddr_in server_addr;
bzero(&server_addr,sizeof(server_addr));
server_addr.sin_family = af_inet;
if(inet_aton(argv[1],&server_addr.sin_addr) == 0) //
伺服器的
ip位址來自程式的引數
server_addr.sin_port = htons(hello_world_server_port);
socklen_t server_addr_length = sizeof(server_addr);
//向伺服器發起連線
,連線成功後
client_socket
代表了客戶機和伺服器的乙個
socket
連線
if(connect(client_socket,(struct sockaddr*)&server_addr, server_addr_length) < 0)
char file_name[file_name_max_size+1];
bzero(file_name, file_name_max_size+1);
printf("please input file name on server:/t");
scanf("%s", file_name);
char buffer[buffer_size];
bzero(buffer,buffer_size);
strncpy(buffer, file_name, strlen(file_name)>buffer_size?buffer_size:strlen(file_name));
//向伺服器傳送
buffer
中的資料
send(client_socket,buffer,buffer_size,0);
// int fp = open(file_name, o_wronly|o_creat);
// if( fp < 0 )
file * fp = fopen(file_name,"w");
if(null == fp )
//從伺服器接收資料到
buffer中
bzero(buffer,buffer_size);
int length = 0;
while( length = recv(client_socket,buffer,buffer_size,0))
// int write_length = write(fp, buffer,length);
int write_length = fwrite(buffer,sizeof(char),length,fp);
if (write_length
bzero(buffer,buffer_size); }
printf("recieve file:/t %s from server[%s] finished/n",file_name, argv[1]);
close(fp);
//關閉socket
close(client_socket);
return 0; }
//// file_server.c檔案傳輸順序伺服器示例
////
本檔案是伺服器的**
#include // for sockaddr_in
#include // for socket
#include // for socket
#include // for printf
#include // for exit
#include // for bzero
/*#include
#include
#include
#include
*/#define hello_world_server_port 6666
#define length_of_listen_queue 20
#define buffer_size 1024
#define file_name_max_size 512
int main(int argc, char **argv)
//把socket
和socket
位址結構聯絡起來
if( bind(server_socket,(struct sockaddr*)&server_addr,sizeof(server_addr)))
//server_socket
用於監聽
if ( listen(server_socket, length_of_listen_queue) )
while (1) //
伺服器端要一直執行
char buffer[buffer_size];
bzero(buffer, buffer_size);
length = recv(new_server_socket,buffer,buffer_size,0);
if (length < 0)
char file_name[file_name_max_size+1];
bzero(file_name, file_name_max_size+1);
strncpy(file_name, buffer, strlen(buffer)>file_name_max_size?file_name_max_size:strlen(buffer));
// int fp = open(file_name, o_rdonly);
// if( fp < 0 )
file * fp = fopen(file_name,"r");
if(null == fp )
else
bzero(buffer, buffer_size); }
// close(fp);
fclose(fp);
printf("file:/t%s transfer finished/n",file_name); }
//關閉與客戶端的連線
close(new_server_socket); }
//關閉監聽用的
socket
close(server_socket);
return 0; }
linux socket程式設計
雙休日無聊透頂,看了四五集 反恐24小時 實在不想看了,於是就想搞linux的socket programming來玩玩,前期資料都準備好 早就想寫個看看了。首先,寫個簡單的client端的程式 呵,其實是copy!server端用的是網上當的乙個除錯工具 一開始用的是以前用過的乙個多執行緒執行的介...
Linux Socket程式設計 執行緒
本章主要列舉伺服器程式的各種網路模型,示例程式以及效能對比後面再寫。一 分類依據。伺服器的網路模型分類主要依據以下幾點 1 是否阻塞方式處理請求,是否多路復用,使用哪種多路復用函式 2 是否多執行緒,多執行緒間如何組織 3 是否多程序,多程序的切入點一般都是accept函式前 二 分類。首先根據是否...
Linux Socket程式設計 例項
tcp協議 伺服器端 tcp server.c include include include include include int main int argc,char argv 將套接字繫結到伺服器的網路位址上 if bind s,struct sockaddr my addr,sizeof ...