#include "shrink.h" /************************************************************************f 通信接口,定义有open,bind,accept,read,write,close *************************************************************************/ #ifdef _WIN32 /************************************************************************ ** Function name: comm_open ** Descriptions: 初始化网络通信接口 ** output parameters: pcom:已初始化的通信结构 *************************************************************************/ void comm_open(struct comm * pcom) { pcom->sock = socket(AF_INET,SOCK_STREAM,0); } /************************************************************************ ** Function name: comm_bind ** Descriptions: 绑定网络接口到端口上,并开始接听 ** input parameters: com:要绑定的通信接口 ** output parameters: pcom:已初始化的通信结构 *************************************************************************/ void comm_bind(struct comm * pcom, int port) { memset(&pcom->sin,0,sizeof(pcom->sin)); pcom->sin.sin_addr.s_addr = INADDR_ANY; pcom->sin.sin_port = htons((u_short)port); pcom->sin.sin_family = AF_INET; bind(pcom->sock, (struct sockaddr*)&pcom->sin, sizeof(pcom->sin)); listen(pcom->sock,128); } /************************************************************************ ** Function name: comm_accept ** Descriptions: 接受连接请求,阻塞直到有请求 ** input parameters: com:本地通信接口 ** output parameters: pcom:远端通信接口 *************************************************************************/ void comm_accept(struct comm com,struct comm * pcom) { int len = sizeof(pcom->sin); pcom->sock = accept(com.sock, (struct sockaddr *)&pcom->sin, &len); } /************************************************************************ ** Function name: comm_read ** Descriptions: 接收数据,阻塞直到有数据 ** input parameters: com_r:远端通信接口 ** len:提供的字符串的长度 ** output parameters: buf:接收的字符串的指针 ** Returned value: 收到的字符串大小 *************************************************************************/ int comm_read(struct comm com_r, char *buf, size_t len) { int n = -1; n = recv(com_r.sock,buf,len,0); return (n); } /************************************************************************ ** Function name: comm_write ** Descriptions: 向远端发送数据 ** input parameters: com_r:远端通信接口 ** len:待发送的字符串长度 ** buf:待发送的字符串 ** Returned value: 发送状态 *************************************************************************/ int comm_write(struct comm com_r, const char *buf, size_t len) { int n; n = send(com_r.sock, buf, len, 0); return (n); } //关闭com /************************************************************************ ** Function name: comm_close ** Descriptions: 关闭通信接口 ** input parameters: com:待关闭的通信接口 *************************************************************************/ void comm_close(struct comm com) { closesocket(com.sock); } #elif _ZLGIP /************************************************************************ ** Function name: comm_open ** Descriptions: 初始化网络通信接口 ** output parameters: pcom:已初始化的通信结构 *************************************************************************/ void comm_open(struct comm * pcom) { pcom->s = *socket(0,0,0); /*创建socket */ } /************************************************************************ ** Function name: comm_bind ** Descriptions: 绑定网络接口到端口上,并开始接听 ** input parameters: com:要绑定的通信接口 ** output parameters: pcom:已初始化的通信结构 *************************************************************************/ void comm_bind(struct comm * pcom, int port) { int ei; pcom->sin.sin_family = 0; /*设置本地地址 */ pcom->sin.sin_addr[0] = NetPort[0].My_Ip[0]; pcom->sin.sin_addr[1] = NetPort[0].My_Ip[1]; pcom->sin.sin_addr[2] = NetPort[0].My_Ip[2]; pcom->sin.sin_addr[3] = NetPort[0].My_Ip[3]; pcom->sin.sin_port = port; ei = bind((SOCKET * )&pcom->s, (struct sockaddr*)&pcom->sin,sizeof(pcom->sin));/*绑定socket */ ei = listen((SOCKET * )&(pcom->s),4); /*开始监听 */ if(ei != 4) while(1); } /************************************************************************ ** Function name: comm_accept ** Descriptions: 接受连接请求,阻塞直到有请求 ** input parameters: com:本地通信接口 ** output parameters: pcom:远端通信接口 *************************************************************************/ void comm_accept(struct comm com,struct comm * pcom) { int len = sizeof(pcom->sin); pcom->us = accept((SOCKET *)&com.s,(struct sockaddr*)&pcom->sin,&len);/*接收客户端连接 */ } /************************************************************************ ** Function name: comm_read ** Descriptions: 接收数据,阻塞直到有数据 ** input parameters: com_r:远端通信接口 ** len:提供的字符串的长度 ** output parameters: buf:接收的字符串的指针 ** Returned value: 收到的字符串大小 *************************************************************************/ int comm_read(struct comm com_r, char *buf, size_t len) { int n = -1; n = recv(com_r.us,(uint8 *)buf,(uint16)len,0); /*接收数据 */ return (n); } /************************************************************************ ** Function name: comm_write ** Descriptions: 向远端发送数据 ** input parameters: com_r:远端通信接口 ** len:待发送的字符串长度 ** buf:待发送的字符串 ** Returned value: 发送状态 *************************************************************************/ int comm_write(struct comm com_r, const char *buf, size_t len) { int n; n = send(com_r.us,(uint8 *)buf,len,0); /*发送数据 */ return (n); } /************************************************************************ ** Function name: comm_close ** Descriptions: 关闭通信接口 ** input parameters: com:待关闭的通信接口 *************************************************************************/ void comm_close(struct comm com) { close(com.us); /*关闭socket */ } #endif