C语言实现简易p2p项目

客户端:

#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<string.h>
#include<assert.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<arpa/inet.h>

#define IPSTR 	"127.0.0.1"
#define PORT 	6000

#define BUF_SIZE 128

int main()
{

	int sockfd = socket(AF_INET,SOCK_STREAM,0);
	assert(sockfd != -1);
	
	struct sockaddr_in saddr;
	memset(&saddr,0,sizeof(saddr));
	saddr.sin_family = AF_INET;
	saddr.sin_port = htons(PORT);//ser port
	saddr.sin_addr.s_addr = inet_addr(IPSTR);//ser ip

	int res = connect(sockfd,(struct sockaddr*)&saddr,sizeof(saddr));
	assert(res != 1);

	while(1)
	{
		printf("connect >> ");
		fflush(stdout);
		
		char buff[BUF_SIZE] = {0};
		fgets(buff,BUF_SIZE,stdin);

		if( strncmp(buff,"end",3) == 0)
		{
			break;
		}
		send(sockfd,buff,strlen(buff),0);
		memset(buff,0,BUF_SIZE);
		recv(sockfd,buff,BUF_SIZE -1,0);
		printf("%s\n",buff);

	}
	close(sockfd);
}

服务器端:

#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<string.h>
#include<assert.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include<pthread.h>

#define IPSTR 	"127.0.0.1"
#define PORT 	6000
#define LIS_NUM	5

#define BUF_SIZE 128

int creat_sockfd();
void* work_thread(void* arg)
{
	int c = (int)arg;
	
	while(1)
	{
		char buff[BUF_SIZE] = {0};
		int n = recv(c,buff,BUF_SIZE-1,0);
		if(n <= 0)
		{
			break;
		}
		
		//test
		printf("buff(%d)=%s\n",c,buff);
		send(c,"ok31234",8,0);

		//get :download
		//put :upload
		//ls -
		//mv
		//rm
	}
}

int main()
{
	int sockfd = creat_sockfd();
	assert(sockfd != -1);

	while(1)
	{
		struct sockaddr_in caddr;
		int len = sizeof(caddr);

		int c = accept(sockfd,(struct sockaddr*)&caddr,&len);
		if(c < 0)
		{
			continue;
		}

		pthread_t id;
		pthread_create(&id,NULL,work_thread,(void*)c);
	}
}

int creat_sockfd()
{
	int sockfd = socket(AF_INET,SOCK_STREAM,0);
	if( sockfd == -1)
	{
		return -1;
	}
	
	struct sockaddr_in saddr;
	memset(&saddr,0,sizeof(saddr));
	saddr.sin_family = AF_INET;
	saddr.sin_port = htons(PORT);
	saddr.sin_addr.s_addr = inet_addr(IPSTR);

	int res = bind(sockfd,(struct sockaddr*)&saddr,sizeof(saddr));
	if (res == -1)
	{
		return -1;
	}

	listen(sockfd,LIS_NUM);

	return sockfd;

}


版权声明:本文为qq_41158224原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。