?? socket.cpp
字號:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <errno.h>
#include <unistd.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <sys/socket.h>
#include <sys/wait.h>
#include <arpa/inet.h>
#include <netdb.h>
#include <fcntl.h>
#include "socket.h"
//////////////////////////////////////////////////////////////////////////////////
////////////////////////////////
int CS_sockfd;
int CS_new_sockfd;
sockaddr_in CS_addr;
sockaddr_in CSC_addr;
////////////////////////////////
int CC_sockfd;
sockaddr_in CC_addr;
sockaddr_in CCS_addr;
//////////////////////////////////////////////////////////////////////////////////////
int Client_InitSocketsStruct(char *hostname,int m_serverport)//服務器ip地址和端口號
{
CC_addr.sin_family=AF_INET;
CC_addr.sin_port=htons(m_serverport);//16 位值從主機字節序轉換為網絡字節序
CC_addr.sin_addr.s_addr = inet_addr(hostname);//把主機ip地址填充到結構中
bzero(&(CC_addr.sin_zero),8);//補足結構的長度
if ((CC_sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1)//創建主機socket
{
printf("CCsocket--------fail:\n",strerror(errno));
return -1;
}
printf("%s\n","CCSocket--------Success!");
return 1;
}
////////////////////////////////////////////////////////////////////////////////////////////
int Sever_InitSocketsStruct(int m_serverport)
{
CS_addr.sin_family=AF_INET;
CS_addr.sin_port=htons(m_serverport);//16 位值從主機字節序轉換為網絡字節序
CS_addr.sin_addr.s_addr = INADDR_ANY;//獲得本機ip地址并填充到結構中inet_addr("10.10.2.117")
bzero(&(CS_addr.sin_zero),8);//補足結構的長度
if ((CS_sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1)//創建主機socket
{
printf("Ssocket--------fail:");
printf("%s\n",strerror(errno));
return -1;
}
printf("%s\n","SSocket--------Success!");
if (bind(CS_sockfd, (sockaddr *)&CS_addr, sizeof(sockaddr)) == -1)
{
printf("bind----------fail:\n",strerror(errno));
return -1;
}
printf("%s\n","bind----------Success!");
return 1;
}
/////////////////////////////////////////////////////////////////////////////////////////////
//綁定本地地址和本地端口
int ListenToPort()
{
if(listen(CS_sockfd,10)==-1)//監聽相應的socket
{
printf("listen--------fail:%s\n",strerror(errno));
return -1;
}
printf("listen--------%s!\n",strerror(errno));
socklen_t sin_size=sizeof(sockaddr_in);
/*fcntl(CS_sockfd,F_SETFL,O_NONBLOCK);//設置套接口文件為非阻塞狀態
fd_set readfd;
timeval timeout;
int ret;
timeout.tv_sec=10;
timeout.tv_usec=0;
FD_ZERO(&readfd);
FD_SET(CS_sockfd,&readfd);
ret=select(CS_sockfd+1,&readfd,NULL,NULL,&timeout);
if(FD_ISSET(CS_sockfd,&readfd))
{}*/
//套接口文件為阻塞監聽狀態
if ( (CS_new_sockfd = accept(CS_sockfd, (struct sockaddr *)&CSC_addr,&sin_size))==-1)
{
printf("accept--------%s!\n",strerror(errno));
return -1;
}
return 1;
}
////////////////////////////////////////////////////////////////////////////
int SendPacket(void* s,int length)//發送成功返回1,發送失敗返回-1
{
char *buf= new char [length];
memcpy(buf,s,length);
if (send(CS_new_sockfd,buf,length, 0) == -1)
{
printf("send----------fail:%s\n",strerror(errno));
delete [] buf;
close(CS_new_sockfd);
exit(0);
}
delete [] buf;
return 1;
}
//////////////////////////////////////////////////////////////////////////////////////////////
int RecvPacket(void* s,int length)//接收數據成功返回1,否則返回-1
{
int recvbytes;
char* buf=new char[length];
if ((recvbytes=recv(CS_new_sockfd, buf, length, 0)) ==-1)
{
printf("recv----------fail:%s\n",strerror(errno));
close(CS_new_sockfd);
exit(1);
}
printf("recv----------Success!\n");
buf[recvbytes] = '\0';
memcpy(s,buf,recvbytes+1);
delete []buf;
return 1;
}
/**/
//////////////////////////////////////////////////////////////////////////////////////////////
int Client_CreateConnection()//客戶端程序使用,連接成功返回0
{
if (connect(CC_sockfd , (struct sockaddr *)&CC_addr,sizeof(struct sockaddr)) == -1)
{
printf("Connect--------fail:%s\n",strerror(errno));
return -1;
}
printf("socket:%d Connect to %s:%d--------:%s!\n",CC_sockfd,inet_ntoa(CC_addr.sin_addr),ntohs(CC_addr.sin_port),strerror(errno));
return 1;
}
///////////////////////////////////////////////////////////////////////////////////////////////
int CRecvPacket(void* s,int length)//接收數據成功返回1,否則返回-1
{
int recvbytes;
char* buf=new char[length];
if ((recvbytes=recv(CC_sockfd, buf, length, 0)) ==-1)
{
printf("recv----------fail:%s\n",strerror(errno));
exit(1);
}
printf("recv----------Success!\n");
buf[recvbytes] = '\0';
memcpy(s,buf,recvbytes+1);
delete []buf;
return 1;
}
///////////////////////////////////////////////////////////////////////////////////
int CSendPacket(void* s,int length)//客戶端發送數據成功返回1,否則返回-1
{
char* buf=new char[length];
memcpy(buf,s,length);
if (send(CC_sockfd,buf,length, 0) == -1)
{
printf("send----------fail:%s\n",strerror(errno));
exit(1);
}
printf("Send----------Success!\n");
delete []buf;
return 1;
}
//////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -