嵌入式Linux网络编程之:网络基础编程
函数原型 | 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);
}
嵌入式Linux 网络编程 SOCKET 操作系统 相关文章:
- 嵌入式Linux技术在工业控制网络中的应用(10-30)
- 基于嵌入式Linux的组态软件实时数据库的设计(02-01)
- 基于ARM+DSP的嵌入式Linux数控系统设计(11-18)
- 基于嵌入式Linux的细胞特征提取算法设计(11-19)
- 基于S3C2410的嵌入式Linux系统构建(03-02)
- 嵌入式Linux网络编程之:实验内容——NTP协议实现(08-13)