初始化SOCKET(客户端) 连接到host的port端口
/////////////////////////////////////////////
int InitSocket_Client(unsigned char *host,int port)
{
int sockfd;
struct hostent *he;
struct sockaddr_in srvaddr;
int connectflag;
he=gethostbyname(host);
sockfd=socket(AF_INET,SOCK_STREAM,0);
bzero(&srvaddr,sizeof(srvaddr));
srvaddr.sin_family=AF_INET;
srvaddr.sin_port=htons(port);
srvaddr.sin_addr=*((struct in_addr *)he->h_addr);
do {
connectflag=connect(sockfd,(struct sockaddr *) &srvaddr, sizeof(struct sockaddr));
switch (connectflag) {
case EACCES:
printf("InitSocket_Client:Write permission is denied!\n");
break;
case EADDRINUSE:
printf("InitSocket_Client:Local address is already in use!\n");
break;
case EAGAIN:
printf("InitSocket_Client:No more free local ports!\n");
break;
case ECONNREFUSED:
printf("InitSocket_Client:No one listening on the remote address!\n");
break;
case EINPROGRESS:
printf("InitSocket_Client:The socket is non-blocking and the connection cannot be completed immediately!\n");
break;
case EINTR:
printf("InitSocket_Client:The system call was interrupted by a signal that was caught!\n");
break;
case ETIMEDOUT:
printf("InitSocket_Client:Timeout while attempting connection!\n");
break;
default:
printf("InitSocket_Client:Error!\n");
break;
}
} while (connectflag==EISCONN);
return sockfd;
}
初始化SOCKET(服务器端) 监听port端口
////////////////////////////////////////////
int InitSocket_Server(int port)
{
int sockfd, new_fd;
socklen_t len;
int one=1;
struct sockaddr_in my_addr, their_addr;
unsigned int lisnum;
if ((sockfd = socket(PF_INET, SOCK_STREAM, 0)) == -1) {
perror("socket");
return -1;
}
//fcntl(sockfd,F_SETFL,O_NONBLOCK);
bzero(&my_addr, sizeof(my_addr));
my_addr.sin_family = PF_INET;
my_addr.sin_port = htons(port);
my_addr.sin_addr.s_addr = INADDR_ANY;
{
perror("setsockopt\n");
return -1;
}
{
perror("bind\n");
return -1;
}
if(listen(sockfd, lisnum) == -1)
{
perror("listen\n");
return -1;
}
len=sizeof(struct sockaddr_in);
if ((new_fd =accept(sockfd, (struct sockaddr *) &their_addr,&len)) == -1) {
perror("accept\n");
return -1;
}
return new_fd;