⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 socket.cpp

📁 linux下的ftp函数库
💻 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 + -