Linux网络编程的一般步骤

服务端:一般服务端首先要将服务打开,在Linux中,网络服务的创建步骤基本上差不多.基本上这些代码都是可以通用的.

#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netinet/ip.h>
#include <netdb.h>

static int create_server(short port)
{
int sockfd;  //网络监听套接字
struct sockaddr_in self;  //网络信息的结构体
int ret;  //接收返回值判断函数知否出错


/*创建网络套接字,参数:AF_INET表示IPv4,指定地址协议类型.SOCK_STREAM表示TCP协议,指定传输协议,也可以是UDP,原始网络传输协议等,0表示传输协议编号,通常默认为0,而且通常不用管*/
sockfd = socket(AF_INET, SOCK_STREAM, 0);
if(sockfd == -1){//返回值-1为出错
perror("socket");
return -1;
}

memset(&self,0,sizeof(self));//将网络信息的接收体初始化
self.sin_family = AF_INET;//网络信息结构体中的网络地址协议信息
self.sin_port = htons(port);//网络信息结构体中的端口信息
self.sin_addr.s_addr = htonl(INADDR_ANY);//网络信息结构体中的IP地址的信息,INADDR_ANY表示采用本机已经获得的IP地址

/*将IP和网络套接字进行绑定,参数:sockfd,网络套接字,第二个参数为网络信息的结构体转网络地址结构体,该参数为指针,第三个参数为指针指向的长度*/
ret = bind(sockfd,(struct sockaddr *)&self,sizeof(self));
if(ret == -1){//返回值为-1则出错
perror("bind");
return -1;
}

listen(sockfd,5);//对该网络套接字进行监听,第二个参数为可监听的最大连接数
printf("listen...\n");

return sockfd;
}

listen_fd = create_server(80);//返回网络监听套接字

sock_fd = accept(listen_fd , (struct sockaddr *)&client , &len);//等待客户端连接,没有客户端连接的话进入阻塞状态

 

客户端:

sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (-1 == sockfd){
perror("socket");
exit(-1);
}

memset(&dest,0,sizeof(dest));
dest.sin_family = AF_INET;
dest.sin_port = htons(port);
inet_aton(argv[1],&dest.sin_addr);
//如果是UDP协议该Connect函数不用写,直接使用socket发送数据
ret = connect(sockfd,(struct sockaddr *)&dest, sizeof(dest));

 

接收和发送数据:

TCP:

发送函数:

int send(int s,const void *mes,int len,unsigned int falgs);

参数:第一个:已经连接成功的套接字

第二个:要发送的内容的指针

第三个:指针指向内容的长度

第四个:发送的选项,默认为0

返回值-1出错,成功返回发送成功的字节数

 

接收函数:

int recv(int s,void *buf,int len,unsigned int flags);

参数:第一个已经连接成功的套接字

第二个:要发送的数据的指针

第三个:要发送的数据的指针的长度

第四个:接收的选项,默认为0

返回值-1出错,成功返回发送接收的字节数,0为对方断开连接

 

UDP:

发送函数:

int sendto(int s,const void *mes,int len,unsigned int flags,const sockaddr * to,int to len);

参数:第一个:套接字

第二个:要发送的内容的指针

第三个:指针指向内容的长度

第四个:对方主机的地址信息的指针

第五个:对方主机的地址信息的指针的长度

返回值:-1出错,成功返回成功发送的字节数

 

接收函数:

int recvfrom(int s,void *buf,int len ,unsigned int flags,struct sockaddr *from,int *fromlen);

参数:第一个已经连接成功的套接字

第二个:要发送的数据的指针

第三个:要发送的数据的指针的长度

第四个:对方主机的地址信息的指针

第五个:对方主机的地址信息的指针的长度

返回值:-1出错,成功返回成功接收的字节数,因为UDP并没有进行连接所以不用判断是否断开

 

转载于:https://www.cnblogs.com/CHYI1/p/5490103.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值