📄 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 + -