#include "comm.h"
#include "net_program.h"
/* UDP operate */
int udp_sock_create(void)
{
int sockfd;
assert((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) > 0);
return sockfd;
}
int udp_sock_bind(int sockfd, int port)
{
assert(port > 0 && sockfd > 0);
struct sockaddr_in addrin;
struct sockaddr *paddr;
paddr = (struct sockaddr *)&addrin;
memset(&addrin, 0, sizeof(struct sockaddr_in));
addrin.sin_family = AF_INET;
addrin.sin_addr.s_addr = htonl(INADDR_ANY);
addrin.sin_port = htons(port);
if (bind(sockfd, paddr, sizeof(addrin)) < 0)
{
close(sockfd);
return -1;
}
return 0;
}
int udp_msg_send(int sockfd, void *pmsg, int size, char *addr, int port)
{
assert(pmsg != NULL && addr != NULL);
assert(size > 0 && port > 0 && sockfd > 0);
int nsock;
struct sockaddr_in addrin;
memset(&addrin, 0, sizeof(addrin));
addrin.sin_family = AF_INET;
inet_pton(AF_INET, addr, (void *)&addrin.sin_addr);
addrin.sin_port = htons(port);
if (sendto(sockfd, pmsg, size, 0, (struct sockaddr *)&addrin, sizeof(addrin)) < 0)
{
return -1;
}
return 0;
}
int udp_msg_recv(int nsock, char *pmsg, int size, struct sockaddr_in *client)
{
socklen_t cli_len;
int recvsize = 0;
cli_len = sizeof(struct sockaddr);
if ((recvsize = recvfrom(nsock, pmsg, size, 0, (struct sockaddr *)client, &cli_len)) < 0)
{
return -1;
}
return recvsize;
}
int sock_close(int sockfd)
{
if (sockfd < 0)
return -1;
else
return close(sockfd);
}
/* TCP operate */
int tcp_sock_create(void)
{
int sockfd;
assert((sockfd = socket(AF_INET, SOCK_STREAM, 0)) > 0);
return sockfd;
}
int tcp_sock_bind_listen(int *psock, int port, int max_connect)
{
assert(psock != NULL && port > 0 && max_connect > 0);
struct sockaddr_in addrin;
struct sockaddr *paddr = (struct sockaddr *)&addrin;
memset(&addrin, 0, sizeof(addrin));
addrin.sin_family = AF_INET;
addrin.sin_addr.s_addr = htonl(INADDR_ANY);
addrin.sin_port = htons(port);
if (bind(*psock, paddr, sizeof(addrin)) < 0)
{
close(*psock);
return -1;
}
if (listen(*psock, max_connect) < 0)
{
close(*psock);
return -1;
}
return 0;
}
int accept_sock(int *psock, int nsock, struct sockaddr_in *client)
{
assert(psock != NULL && nsock > 0);
int addr_len;
addr_len = sizeof(struct sockaddr_in);
while(1)
{
if ((*psock = accept(nsock, (struct sockaddr *)client, &addr_len)) > 0)
{
return 0;
}
else if (errno == EINTR)
{
continue;
}
else
{
assert(0);
}
}
return 0;
}
int tcp_connect(int *psock, int port, char *addr)
{
assert(psock != NULL && addr != NULL);
struct sockaddr_in addrin;
memset(&addrin, 0, sizeof(struct sockaddr_in));
addrin.sin_family = AF_INET;
inet_pton(AF_INET, addr, (void *)&addrin.sin_addr);
addrin.sin_port = htons(port);
if (connect(*psock, (struct sockaddr *)&addrin, sizeof(addrin)) < 0)
{
return -1;
}
return 0; //返回连接成功的套接字
}
int locate_remote_sock(int sock, char *addr, int addlen)
{
struct sockaddr_in addrin;
int addr_len;
memset(&addrin, 0, sizeof(addrin));
addr_len = sizeof(addrin);
/* 获取对方套接字地址信息 */
getpeername(sock, (struct sockaddr *)&addrin, &addr_len);
/* 转换为点分十进制 */
inet_ntop(AF_INET, (void *)&addrin.sin_addr, addr, addlen);
return 0;
}
int locate_native_sock(int sock, char *addr, int addlen)
{
struct sockaddr_in addrin;
int addr_len;
memset(&addrin, 0, sizeof(addrin));
addr_len = sizeof(addrin);
/* 获取本地套接字地址信息*/
getsockname(sock, (struct sockaddr *)&addrin, &addr_len);
/* 转换为点分十进制 */
inet_ntop(AF_INET, (void *)&addrin.sin_addr, addr, addlen);
return 0;
}
net_program.tar.gz_UDP接口封装_linux TCP网络库_linux udp封装_linux 动态库
版权申诉
95 浏览量
2022-09-19
20:58:43
上传
评论
收藏 2KB GZ 举报
四散
- 粉丝: 49
- 资源: 1万+
最新资源
- 二叉树7-1-1.cpp
- android 9.0 原生模拟器 签名文件
- 技术面试最后反问面试官的话 校招面试非技术问题有哪些 非技术问题如何回答.png
- NB-IOT-BC26全网通模块Altium+ CADENCE +PADS三种格式(原理图SCH+PCB封装库)文件.zip
- 基于微信小程序开发的校园失物招领系统源码毕业设计(优质项目源码).zip
- 词向量是一种将自然语言中的单词转换为数值向量的技术,它能够捕捉词义和上下文信息
- nmap与masscan的简单使用
- MyBatis动态SQL.pdf
- 基于stm32单片机protues仿真的温湿度控制系统设计(仿真图、源代码)
- 词向量:自然语言处理的基石
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈