Chinaunix首页 | 论坛 | 博客
  • 博客访问: 446825
  • 博文数量: 89
  • 博客积分: 2713
  • 博客等级: 少校
  • 技术积分: 938
  • 用 户 组: 普通用户
  • 注册时间: 2010-08-18 21:19
个人简介

为了成为自由自在的人而奋斗!

文章分类

全部博文(89)

文章存档

2016年(5)

2015年(9)

2014年(2)

2013年(10)

2012年(1)

2011年(30)

2010年(32)

分类: 系统运维

2010-10-23 14:36:31

SOCKET简介 Socket应用 n所谓socket通常也称作套接字,应用程序通常通过套接字向网络发出请求或者应答网络请求。 nInternet上有很多这样的主机,这些主机一般运行了多个服务软件,同时提供几种服务。每种服务都打开一个Socket,并绑定到一个端口上,不同的端口对应于不同的服务 n比如:http 80, ftp 21     nsockets和底层的文件描述符非常类似(可以在sockets里使 nread()write()函数),尽管建立一个socket比打开,读取和写入一个文件更 n为麻烦,但这是由于网络连接比单纯的本地硬盘的读写复杂的多所造成的。 n通常,sockets用来实现客户机/服务器对。服务器的任务是监听某个特定的端口 n,当接收到客户端的服务请求时完成相应的服务;客户机的任务是请求服务器完 n成事先设定好的服务。   什么是socket n网络通讯应用(网络间进程通信) nTCP/IP: IP地址+TCP/UDP端口号 nsocket类型 ndomain socket: 主机进程通信(AF_UNIX) nTCP/UDP socket: 网络进程通信(AF_INET) nTIPC: 板间进程通信(AF_TIPC) nsocket使用过程 n和打电话类似 c/s Socket 过程
常用函数

建立Socket,程序可以调用Socket函数

int socket(int domain, int type, int protocol);
    domain指明所使用的协议族,通常为PF_INET,表示互联网协议族(TCP/IP协议族);type参数指定socket的类型: SOCK_STREAM SOCK_DGRAMSocket接口还定义了原始SocketSOCK_RAW),允许程序使用低层协议;protocol通常赋值 "0" Socket()调用返回一个整型socket描述符,你可以在后面的调用使用它。 int bind(int sockfd,struct sockaddr *my_addr, int addrlen);
   Sockfd是调用socket函数返回的socket描述符,my_addr是一个指向包含有本机IP地址及端口号等信息的sockaddr类型的指针addrlen常被设置为sizeof(struct sockaddr)     nconnect() nInt connect(int sockfd, struct sockaddr *serv_addr, int addrlen) nlisten ()              nInt listen(int sockfd, int backlog) n返回失败-1,否则为新句柄     naccept()             nInt accept(int sockfd, void *addr, int *addrlen) n 接发函数(SOCK_STREAM ): nInt send(int sock, const void *msg, int len, int flags) nInt recv(int sock, const void *buf, int len, int flags)   n接发函数(SOCK_DGRAM): nInt sendto(int sock, const void *msg, int len, int flags nConst struct sockaddr *to, int tolen) nInt recvfrom(int sock, const void *buf, int len, int flags, const struct sockaddr *from, int fromlen)   nClose() shutdown() nInt close(int sockfd) nInt shutdown (int sockfd, int how) n1  不允许再收了 n2  不允许再发了 n3 不允许收发了(同close   nRead(int sockfd, const void *msg, size_t len) nWrite(int sockfd, const void *msg, size_t len) nsendrecv差不多,少了个参数   nint select(int nfds, fd_set *readset, fd_set *writeset, fd_set* exceptset, struct tim *timeout);  n功能:测试指定的fd可读?可写?有异常条件待处理?适合同时监听多个不同请求 Fd_set用法 nfd_set(它比较重要所以先介绍一下)是一组文件描述字(fd)的集合,它用一位来表示一个fd nselect()函数主要是建立在fd_set类型的基础上的。 n4种操作 n    FD_ZERO(&set);      0 n    FD_SET(fd, &set);    置某位为1 n    FD_CLR(fd, &set);    删除一个文件描述符 n    FD_ISSET(fd, &set);  测试指定的文件描述符是否在该集合中。 n使用select函数的过程一般是:   
阅读(1245) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2010-10-24 16:20:04

很好的, 收藏了 推荐一个博客,提供很多免费软件编程电子书下载: http://free-ebooks.appspot.com