linux下socket程式設計例項
一、基本socket函式
linux系統是通過提供套接字(socket)來進行網路程式設計的。網路的socket資料傳輸是一種特殊的i/o,socket也是一種檔案描述符。socket也有乙個類似於開啟檔案的函式:socket(),呼叫socket(),該函式返回乙個整型的socket的描述符,隨後的連線建立、資料傳輸等操作也都是通過該
socket實現。
1、socket函式
syntax:
int socket(int domain, int type, int protocol);
功能說明:
呼叫成功,返回socket檔案描述符;失敗,返回-1,並設定errno
引數說明:
domain指明所使用的協議族,通常為pf_inet,表示tcp/ip協議;
type引數指定socket的型別,基本上有三種:資料流套接字、資料報套接字、原始套接字
protocol通常賦值"0"。
socket資料結構中包含這五種資訊。
2、bind函式
syntax:
int bind(int sock_fd,struct sockaddr_in *my_addr, int addrlen);
功能說明:
將套接字和指定的埠相連。成功返回0,否則,返回-1,並置errno.
引數說明:
sock_fd是呼叫socket函式返回值,
my_addr是乙個指向包含有本機ip位址及埠號等資訊的sockaddr型別的指標;
struct sockaddr_in結構型別是用來儲存socket資訊的:
struct sockaddr_in ;
struct sockaddr_in s_add,c_add;
unsigned short portnum=0x8888;
printf("hello,welcome to client!\r\n");
cfd = socket(af_inet, sock_stream, 0);
if(-1 == cfd)
printf("socket fail ! \r\n");
return -1;
printf("socket ok !\r\n");
bzero(&s_add,sizeof(structsockaddr_in));
s_add.sin_family=af_inet;
s_add.sin_addr.s_addr=inet_addr("192.168.1.2");
s_add.sin_port=htons(portnum);
printf("s_addr = %#x ,port :%#x\r\n",s_add.sin_addr.s_addr,s_add.sin_port);
if(-1 == connect(cfd,(struct sockaddr*)(&s_add), sizeof(struct sockaddr)))
printf("connect fail !\r\n");
return -1;
printf("connect ok !\r\n");
if(-1 == (recbytes =read(cfd,buffer,1024)))
printf("read data fail !\r\n");
return -1;
printf("read ok\r\nrec:\r\n");
buffer[recbytes]='\0';
printf("%s\r\n",buffer);
getchar();
close(cfd);
return 0;
2、server.c
#include
#include
#include
#include
#include
#include
int main()
int sfp,nfp;
struct sockaddr_in s_add,c_add;
int sin_size;
unsigned short portnum=0x8888;
printf("hello,welcome to my server!\r\n");
sfp = socket(af_inet, sock_stream, 0);
if(-1 == sfp)
printf("socket fail ! \r\n");
return -1;
printf("socket ok !\r\n");
bzero(&s_add,sizeof(structsockaddr_in));
s_add.sin_family=af_inet;
s_add.sin_addr.s_addr=htonl(inaddr_any);
s_add.sin_port=htons(portnum);
if(-1 == bind(sfp,(struct sockaddr*)(&s_add), sizeof(struct sockaddr)))
printf("bind fail !\r\n");
return -1;
printf("bind ok !\r\n");
if(-1 == listen(sfp,5))
printf("listen fail !\r\n");
return -1;
printf("listen ok\r\n");
while(1)
sin_size = sizeof(struct sockaddr_in);
nfp = accept(sfp, (struct sockaddr*)(&c_add), &sin_size);
if(-1 == nfp)
printf("accept fail !\r\n");
return -1;
printf("accept ok!\r\nserver start getconnect from %#x :%#x\r\n",ntohl(c_add.sin_addr.s_addr),ntohs(c_add.sin_port));
if(-1 == write(nfp,"hello,welcome tomy server \r\n",32))
printf("write fail!\r\n");
return -1;
printf("write ok!\r\n");
close(nfp);
close(sfp);
return 0;
在cygwin下,使用gcc命令編譯如下:
gcc -o server server.c
gcc -o client client.c
然後執行程式:
./server
./client
server執行效果如下:
hello,welcome to my server !
socket ok !
bind ok !
listen ok
accept ok!
server start get connect from 0xc0a80102 :0xc927
write ok!
client執行效果如下:
hello,welcome to client !
socket ok !
s_addr = 0x201a8c0 ,port : 0x8888
connect ok !
read ok
rec:
hello,welcome to my server
Linux下基於C C 的Socket程式設計例項
socket程式設計例項 例項中的伺服器通過socket連線向客戶端傳送字串 hello,you are connected 只要在伺服器上執行該伺服器軟體,在客戶端執行客戶軟體,客戶端就會收到該字串。該伺服器軟體 如下 include include include include include...
linux下socket程式設計
一 什麼是socket socket可以看成是使用者程序與核心網路協議棧的程式設計介面。socket不僅可以用於本機的程序間通訊,還可以用於網路上不同主機的程序間通訊。socket api是一層抽象的網路程式設計介面,適用於各種底層網路協議,如ipv4 ipv6。struct sockaddr in...
linux下socket程式設計
作為乙個嵌入式開發者,在實際的研發專案中,常常需要編寫socket網路程式設計介面,提供給軟體開發人員。下面將提供乙個常用的 模板 客戶端的功能可以用微控制器多功能除錯助手進行驗證 include include include include include include include def...