(1)通過socket()函數創建壹個套接字。
(2)通過綁定函數將套接字綁定到設備地址。
(3)read/recv/recvfromwrite/send/send to。
(4)close方法關閉套接字。
例子如下:
test1.c
#包含?& ltstdio.h & gt
#包含?& ltstdlib.h & gt
#包含?& ltunistd.h & gt
#包含?& ltnetinet/in . h & gt;
#包含?& ltarpa/inet . h & gt;
int?主要(無效)
{
//創建?(電源)插座
int?fd?=?套接字(AF_INET,?SOCK_DGRAM,?0);
if(fd==-1)
{
perror(" socket \ n ");
退出(-1);
}
printf("socket?fd=%d\n ",FD);
//構建?聯系?地址
struct?sockaddr_in?addr
addr.sin_family?=?AF _ INET
addr.sin_port?=?htons(6666);
addr.sin_addr.s_addr?=?inet _ addr(" 127 . 0 . 0 . 1 ");
int?r;
r?=?bind(fd,(struct?sockaddr *)& amp;addr,sizeof(addr));
if(r==-1)
{
perror(" bind ");
關閉(FD);
退出(-1);
}
printf("bind?地址?成功了!\ n ");
//接受?還是?發送?消息
夏爾?buf[255];
struct?sockaddr_in?從;
socklen_t?len
萊恩。=?sizeof(from);
while(1)
{
r?=?recvfrom(fd,buf,sizeof(buf)-1,0,(struct?sockaddr *)& amp;從& amplen);
if(r & gt;0)
{
buf[r]= 0;
printf("The?留言?從哪裏?%s?is:%s\n ",inet_ntoa(from.sin_addr),buf);
}
其他
{
打破;
}
}
//關閉?(電源)插座
關閉(FD);
回歸?0;
}test2.c
#包含?& ltstdio.h & gt
#包含?& ltstdlib.h & gt
#包含?& ltunistd.h & gt
#包含?& ltstring.h & gt
#包含?& ltsys/socket . h & gt;
#包含?& ltnetinet/in . h & gt;
#包含?& ltarpa/inet . h & gt;
int?主要(無效)
{
//創建?(電源)插座
int?fd?=?socket(AF_INET,SOCK_DGRAM,0);
if(fd==-1)
{
perror(“插座”);
退出(-1);
}
printf("創建?插座?好吧!\ n ");
//創建?安?發送?地址
struct?sockaddr_in?addr = { };
addr.sin_family?=?AF _ INET
addr.sin_port?=?htons(6666);
addr . sin _ addr . s _ addr = inet _ addr(" 127 . 0 . 0 . 1 ");
//發送?那個?留言?去哪?那個?指定?地址
int?r;
夏爾?buf[255];
while(1)
{
r?=?read(0,buf,sizeof(buf)-1);
if(r & lt;=0)
打破;
sendto(fd,buf,r,0,(struct?sockaddr *)& amp;addr,sizeof(addr));
}
//關閉?(電源)插座
關閉(FD);
回歸?0;
}先運行test1.c,再運行test2.c,輸入test2.c運行後的內容,信息會顯示在test1.c所在的終端中。
運行結果如下: