linux socket 程式設計

2021-04-14 16:01:30 字數 4700 閱讀 2315

兩段程式:可用於開發板和主機之間的資料傳輸,很管用!! //

// 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 ...