前言,这里有一篇文章,里面的例子亲测可用,需要的童鞋可以亲自尝试下
http://www.cnblogs.com/xudong-bupt/archive/2013/12/29/3483059.html
---- 言归正传----
二、Tcp/ip 编程基础
1、创建网络接口函数:socket
需要的头文件:(可以用 man socket 查看相关信息,之后不再罗列头文件,不知道的自行百度或者man)
#include <sys/types.h>
#include <sys/socket.h>
原型:int socket(int domain, int type, int protocol);
创建成功:返回该套接字的文件描述符;失败:-1
domain: 网络通信的域
type:套接字通信的类型
protocol:一般情况下都为 0.
2、对套接字进行地址和端口的绑定:bind()
原型:int bind(int sockfd, const struct sockaddr *my_addr, socklen_taddrlen );
绑定成功:0; 失败:-1
Sockfd:socket()返回的文件描述符
Sockaddr(sockaddr_in) *my_addr :结构体中设定 需要的1.通信的域,协议族 2.端口 3.IP地址
addrlen: 参数2结构体的长度一般写为:sizeof(struct sockaddr)
3、监听本地端口(仅 服务器使用):listen
原型: int listem(intsockdf, int backlog);
成功返回:0; 失败返回:-1;
只监听类型为SOCK_STREAM和SOCK_SEQPACKET
4、接受一个网络的请求 accept
原型: int accept(intsockfd, struct sockaddr *addr, socklen_t *addrlen);
sockfd: 可以认为是服务器创建的socket的文件描述符
struct sockaddr *addr: 存放连入的client的协议族,prot,IP地址等信息
*addrlen: sozeof(sockaddr_in)
5、 连接目标网络服务器 connect()
客户端不需要监听本地,通过connect()连接到服务器
原型: int connect(intsockfd, struct sockaddr_in *, int addrlen);
sockfd: 服务器的文件描述符
struct sockaddr_in *: 目标服务器的协议族,port,IP地址等信息
addrlen: sizeof(struct sockaddr_in)
6、 写入函数write() //send()
int write(int conn_sockfd, char *buffer,int data_len);//示例
conn_sockfd: clien和server二者相联系的文件描述符,accept返回的文件描述符
buffer:要发送的数据
data_len:数据长度
7、读取函数read() //recv()
int read (int conn_sockfd, char *buffer,int data_len);//示例
conn_sockfd: clien和server二者相联系的文件描述符,accept返回的文件描述符
buffer:读取数据的缓冲区
data_len:数据长度
8、关闭套接字 close()
int close(int sockfd);
一般关闭的时候需要将accept成功返回的套接字也关掉,即
close(conn);
close(server_sockfd);