微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 嵌入式Linux网络编程之:网络基础编程

嵌入式Linux网络编程之:网络基础编程

时间:08-13 来源:3721RD 点击:

#include <sys/socket.h><sys/socket.h>

函数原型

int send(int sockfd, const void *msg, int len, int flags)

函数传入值

socktd:套接字描述符

msg:指向要发送数据的指针

len:数据长度

flags:一般为0

函数返回值

成功:发送的字节数

出错:-1

表10.14列出了recv()函数的语法要点。

表10.14 recv()函数语法要点

所需头文件

#include <sys/socket.h>

函数原型

int recv(int sockfd, void *buf,int len, unsigned int flags)

函数传入值

socktd:套接字描述符

buf:存放接收数据的缓冲区

len:数据长度

flags:一般为0

函数返回值

成功:接收的字节数

出错:-1

表10.15列出了sendto()函数的语法要点。

表10.15 sendto()函数语法要点

所需头文件

#include <sys/socket.h>

函数原型

int sendto(int sockfd, const void *msg,int len, unsigned int flags, const struct sockaddr *to, int tolen)

函数传入值

socktd:套接字描述符

msg:指向要发送数据的指针

len:数据长度

flags:一般为0

to:目地机的IP地址和端口号信息

tolen:地址长度

函数返回值

成功:发送的字节数

出错:-1

表10.16列出了recvfrom()函数的语法要点。

表10.16 recvfrom()函数语法要点

所需头文件

#include <sys/socket.h>

函数原型

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

函数传入值

socktd:套接字描述符

buf:存放接收数据的缓冲区

len:数据长度

flags:一般为0

from:源主机的IP地址和端口号信息

tolen:地址长度

函数返回值

成功:接收的字节数

出错:-1

(3)使用实例。

该实例分为客户端和服务器端两部分,其中服务器端首先建立起socket,然后与本地端口进行绑定,接着就开始接收从客户端的连接请求并建立与它的连接,接下来,接收客户端发送的消息。客户端则在建立socket之后调用connect()函数来建立连接。

服务端的代码如下所示:

/*server.c*/

#include <sys/types.h>

#include <sys/socket.h>

#include <stdio.h>

#include <stdlib.h>

#include <errno.h>

#include <string.h>

#include <unistd.h>

#include <netinet/in.h>

#define PORT4321

#define BUFFER_SIZE 1024

#define MAX_QUE_CONN_NM 5

int main()

{

struct sockaddr_in server_sockaddr,client_sockaddr;

int sin_size,recvbytes;

int sockfd, client_fd;

char buf[BUFFER_SIZE];

/*建立socket连接*/

if ((sockfd = socket(AF_INET,SOCK_STREAM,0))== -1)

{

perror("socket");

exit(1);

}

printf("Socket id = %d\n",sockfd);

/*设置sockaddr_in 结构体中相关参数*/

server_sockaddr.sin_family = AF_INET;

server_sockaddr.sin_port = htons(PORT);

server_sockaddr.sin_addr.s_addr = INADDR_ANY;

bzero(&(server_sockaddr.sin_zero), 8);

int i = 1;/* 允许重复使用本地地址与套接字进行绑定 */

setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &i, sizeof(i));

/*绑定函数bind()*/

if (bind(sockfd, (struct sockaddr *)&server_sockaddr,

sizeof(struct sockaddr)) == -1)

{

perror("bind");

exit(1);

}

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top