预览加载中,请您耐心等待几秒...
1/9
2/9
3/9
4/9
5/9
6/9
7/9
8/9
9/9

在线预览结束,喜欢就下载吧,查找使用更方便

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

intsocket(intdomain,inttype,intprotocol); intbind(intsockfd,structsockaddr*my_addr,intaddrlen); intconnect(intsockfd,structsockaddr*serv_addr,intaddrlen); intlisten(intsockfd,intbacklog); intaccept(intsockfd,void*addr,int*addrlen); intsend(intsockfd,constvoid*msg,intlen,intflags); intrecv(intsockfd,void*buf,intlen,unsignedintflags); close(sockfd); intshutdown(intsockfd,inthow); intselect(intnumfds,fd_set*readfds,fd_set*writefds,fd_set*exceptfds,structtimeval*timeout); structsockaddr{ unsignedshortsa_family;/*地址族,AF_xxx*/ charsa_data[14];/*14字节的协议地址*/ }; structsockaddr_in{ shortintsin_family;/*地址族*/ unsignedshortintsin_port;/*端口号*/ structin_addrsin_addr;/*IP地址*/ unsignedcharsin_zero[8];/*填充0以保持与structsockaddr同样大小*/ }; structtimeval{ inttv_sec;/*seconds*/ inttv_usec;/*microseconds*/ }; typedefstruct{ /*XPG4.2requiresthismembername.Otherwiseavoidthename fromtheglobalnamespace.*/ #ifdef__USE_XOPEN __fd_maskfds_bits[__FD_SETSIZE/__NFDBITS]; #define__FDS_BITS(set)((set)->fds_bits) #else __fd_mask__fds_bits[__FD_SETSIZE/__NFDBITS]; #define__FDS_BITS(set)((set)->__fds_bits) #endif }fd_set; 一个聊天程序 服务器代码 #include<stdlib.h> #include<stdio.h> #include<netdb.h> #include<sys/types.h> #include<sys/socket.h> #include<string.h> #include<netinet/in.h> #include<arpa/inet.h> #include<unistd.h> #include<fcntl.h> #defineMAXDATASIZE256 #defineSERVPORT4444/*服务器监听端口号*/ #defineBACKLOG1/*最大同时连接请求数*/ #defineSTDIN0/*标准输入文件描述符*/ intmain(void) { FILE*fp;/*定义文件类型指针fp*/ intsockfd,client_fd;/*监听socket.sock_fd,数据传输socket.new_fd*/ intsin_size; structsockaddr_inmy_addr,remote_addr;/*本机地址信息,客户地址信息*/ charbuf[256];/*用于聊天的缓冲区*/ charbuff[256];/*用于输入用户名的缓冲区*/ charsend_str[256];/*最多发出的字符不能超过256*/ intrecvbytes; fd_setrfd_set,wfd_set,efd_set;/*被select()监视的读、写、异常处理的文件描述符集合*/ structtimevaltimeout;/*本次select的超时结束时间*/ intret;/*与client连接的结果*/ if((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1){/*错误检测*/ perror("socket"); exit(1); } /*端填充sockaddr结构*/ bzero(&my_addr,sizeof(structsockaddr_in)); my_addr.sin_fam