/*******************************
* 客戶端程式 *
********************************/
#include
#include
#include
#include
#include
#include
#include
#include
int main(int argc,char *argv)
//客戶端初始化結構體,連線到伺服器的4321埠
their_addr.sin_family = af_inet;
their_addr.sin_port = htons(4321);
their_addr.sin_addr = *((struct in_addr *)he->h_addr);
bzero(&(their_addr.sin_zero),8);
//向伺服器發起連線
if(connect(sockfd,(struct sockaddr *)&their_addr,sizeof(struct sockaddr_in))==-1)
//向伺服器傳送字串"hello!"
if(send(sockfd,"hello! i am client.",100,0)==-1)
//接收從伺服器返回的資訊
if(recv(sockfd,buf,100,0)==-1)
printf("result: %s \n",buf);
/*通訊結束*/
close(sockfd);
return 0;
makefile:
extra_libs += -lpthread
cc=gcc
exec = ./client
objs = client.o
all: $(exec)
$(exec): $(objs)
$(cc) $(ldflags) -o $@ $(objs) $(extra_libs)
install:
$(exp_install) $(exec) $(install_dir)
clean:
-rm -f $(exec) *.elf *.gdb *.o
/*******************************
* server.c *
********************************/
#include //socket
#include //socket
#include //printf
#include //exit
#include
#include //bzero
//#include
#include //sockaddr_in
#define server_port 4321
int main()
printf("socket success!,sockfd=%d\n",sockfd);
//初始化sockaddr結構體,繫結4321埠
my_addr.sin_family = af_inet;
my_addr.sin_port = htons(server_port);
my_addr.sin_addr.s_addr = inaddr_any;
bzero(&(my_addr.sin_zero),8);
//繫結套接字描述符sockfd
if(bind(sockfd,(struct sockaddr *)&my_addr,sizeof(struct sockaddr_in))==-1)
printf("bind success!\n");
//建立監聽套接字描述符sockfd
if(listen(sockfd,10)==-1)
printf("listening....\n");
//伺服器阻塞監聽套接字,等待客戶端程式連線
while(1)
// bzero(buff, 100);
//生成乙個子程序來完成和客戶端的會話,父程序繼續監聽
if(!fork())
printf(" %s\n",buff);
//傳送資訊到客戶端
if(send(new_fd,"welcome,this is server.",50,0)==-1)
perror("send");
/*本次通訊結束*/
close(new_fd);
exit(0);
} /*下乙個迴圈*/
} close(sockfd);
} /*
root@1[server]# ./server
server is run: success
hello! client connect.
root@2[client]# .client 192.168.1.99
result: welcome,this is server.
*/makefile:
extra_libs += -lpthread
cc = arm-poky-linux-gnueabi-gcc
exec = ./server
objs = server.o
all: $(exec)
$(exec): $(objs)
$(cc) $(ldflags) -o $@ $(objs) $(extra_libs)
install:
$(exp_install) $(exec) $(install_dir)
clean:
-rm -f $(exec) *.elf *.gdb *.o
linux網路裝置驅動
linux網路裝置驅動 linux網路驅動程式的體系結構可劃分為4個層次。linux核心源 中提供了網路裝置介面及以網路子系統的上層的 移植特定網路硬體的驅動程式的主要工作就是完成裝置驅動功能層的相應 根據底層具體的硬體特性,定義網路裝置介面struct net device型別的結構體變數,並實現...
linux 網路裝置驅動
linux 網路驅動 謹以此文紀念過往的歲月 一.前言 在linux中網路驅動也是乙個大頭,如何去理解網路驅動是作為乙個linux驅動工程師必備的技能。不過同樣的裝置,在不同人的手中會有不同的效果,其原因就在於驅動的好與否。二.裝置註冊 學習網路的驅動與學習普通cdev驅動一樣,都是學習其模板,然後...
Linux網路裝置驅動 一
一 網路裝置驅動基礎 1.乙太網基礎理論 乙太網是區域網的一種,它使用載波監聽多路訪問及衝突檢測技術 csma cd 並以10m s的速率執行在多種型別的電纜上,常用的網絡卡晶元有dm9000 dm9161 cs8900晶元。乙太網的拓撲結構有匯流排型和星型,乙太網的工作模式有半雙工和全雙工。目前雙...