您的位置:首页 > 理论基础 > 计算机网络

LINUX应用编程 – 网络编程篇

2015-03-15 17:24 337 查看
[b]地址转换函数[/b]:

1.将字符串的IP地址转换成网络字节序的地址

in_addr_t inet_addr(const char *strIP);

若成功,返回32位网络字节序的地址,若出错,则返回INADDR_NONE 不建议使用,因为255.255.255.255这个地址无法被转换

int inet_aton(const char *strIP, struct in_addr *addr);

若成功,返回非0,若地址字符串有错,返回0,仅转换IPV4地址

int inet_pton(int family, const char *strptr, void *addrptr);

返回:1成功,0-输入不是有效的表达式,-1出错 Family:AF_INET6,AF_INET

2.将网络字节序的地址转换成字符串的IP地址

char *inet_ntoa(struct in_addr inaddr);

返回:指向字符串IP的指针。非线程安全,在多线程时避免使用 例:char *ip = inet_ntoa(addr.sin_addr);

const char *inet_ntop(int family, const void *addr, char *strIP, size_t len);

参数:family – 地址族,值为AF_INET或AF_INET6 addr – 需要转换的地址 返回:指向字符串IP的指针,失败返回NULL; 例:char ip[64]; inet_ntop(AF_INET, &addr.sin_addr, ip, 64);、

[b]创建套接字[/b]

1. socket() int socket(int family, int type, int protocol);

功能描述:创建套接字文件描述字。 参数:family – 协议族(网络层) PF_INET -------- IPV4协议 PF_INET6-------- IPV6协议

PF_LOCAL-------- UNIX域协议(PF_LOCAL) PF_ROUTE------- 路由套接口 type – 套接字类型 SOCK_STREAM -------- 字节流套接口(TCP及AC_LOCAL时) SOCK_DGRAM --------- 数据报套接口(UDP及AC_LOCAL时) protocol – 取0 返回:成功为非负描述字,失败返回-1 例子:int fd = socket(PF_INET, SOCK_STREAM, 0);

2. connect()

int connect(int sock, const struct sockaddr *addr, socklen_t len);

功能描述:建立从客户端到服务器的连接 返回:成功返回0,失败返回-1

3 recv() int recv(int sock, void *buf, int size, int flag);

功能描述:从sock套接字接收数据。服务器使用其接收客户请求,客户使用它接受服务器的应答。如果没有数据,将阻塞。也可以使用recv接收面向连接的UDP的报文。

参数 sockfd:套接字描述符 buf:指向内存块的指针 size:内存块大小,以字节为单位 flags:一般为0 返回: >0 接收到的字节个数 -1 接收失败(EAGAIN-套接字非阻塞, EINTR表示被信号中断) 0 对方连接已关闭,说明套接字已经不可用,需要重新建立连接

4 send() ssize_t send(int sock, const void *buf, size_t len, int flags);

功能 在TCP连接上发送数据,返回成功传送数据的长度,出错时返回-1。 send会将外发数据复制到OS内核中,也可以使用send发送面向连接的UDP报文。

参数说明: sock:套接字描述符 data:指向要发送数据的指针 data_len:数据长度 flags:一直为0

5 close() int close(int s); 功能 关闭套接字。

参数说明: s – 要关闭的套接字

connect程序

#include <unistd.h>
#include <stdio.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <pthread.h>

int main()
{
int sock,size;
uint16_t port = 8000;
const     char *IP = "192.168.7.118";
char buf[1024] = "songlongfei";
struct sockaddr_in addr;
memset(&addr,0,sizeof(addr));
sock = socket(AF_INET,SOCK_STREAM,0);
addr.sin_family = AF_INET;
addr.sin_port = htons(port);
inet_pton(AF_INET,IP,&addr.sin_addr);
if(connect(sock,(struct sockaddr*)&addr,sizeof(addr)) != 0)
printf("Connect failed\n");
while(1)
{
fgets(buf,sizeof(buf),stdin);
if((size = send(sock,buf,sizeof(buf),0)) < 0)
printf("send failed\n");
else
printf("Connect succ!\n");
recv(sock,buf,sizeof(buf),0);
printf("%s\n",buf);
}
close(sock);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐