linux下网络编程(TCP)

客户端:
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <netinet/in.h>
#include <errno.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#include <stdlib.h>
#include <stdlib.h>


#define MAXLINE 	7000
#define SERV_PORT 	8000
#define SERV_IP		"192.168.0.203"


int get_command()
{
	int ch;
	printf("Please input you command\n");
	printf("a.send file    b.loading\n");
	ch = getchar();
	while(getchar() != '\n')
		continue;
	return ch;
}
int main(int argc ,char *argv[])
{
	struct sockaddr_in servaddr;
	char		buf[MAXLINE];
	int 		sock_fd;
	int  		state = 0;  
	int ch; 
	FILE *fp;
	int i;
	int len;
	char path[50];

//初始化服务器
	bzero(&servaddr, sizeof(servaddr));
	servaddr.sin_family = AF_INET;
	servaddr.sin_port = htons(SERV_PORT);
	servaddr.sin_addr.s_addr = inet_addr(SERV_IP);

	while(1)
	{
		if((sock_fd = socket(AF_INET, SOCK_STREAM, 0)) < 0)
		{
			perror("socket");
			exit(1);
		}
		if(connect(sock_fd, (struct sockaddr *)&servaddr, sizeof(servaddr)) < 0)
		{
			perror("connect");
			exit(1);
		}

		if(state == 0)
		{
			do 
				ch = get_command();
			while((ch != 'a')&&(ch != 'b'));
			while(state == 0)
			{
				printf("Please iput a filename\n");
				bzero(buf,sizeof(buf));
				bzero(path,sizeof(path));
				len = read(1,buf, 80);
				len-=1;
				buf[len] = '\0';
				sprintf(path,"../%s",buf);
				
				if((fp = fopen(path,"r")) == NULL)
				{
					printf("the file is not exist\n");
				}
				else
				{
					i = 0;
					write(sock_fd,&i,4);
					write(sock_fd,&len,4);
					write(sock_fd,&buf,len);
					state = 1;
				}
			}
			
		}
		else if(state == 1)
		{
			bzero(buf,sizeof(buf));
			if((len = fread(buf,1,MAXLINE,fp)) == 0)
			{
				i = -1;
				write(sock_fd,&i,4);
				fclose(fp);
				state = 0;
			}
			else
			{
				i++;
				printf("包:%d-----len:%d\n",i,len);
				write(sock_fd,&i,4);
				write(sock_fd,&len,4);
				write(sock_fd,&buf,len);
			}
		}
		
		
		close(sock_fd);
	}


	return 0;
}
服务端:
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <unistd.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <sys/types.h> 
#include <pthread.h>


#define MAXLINE 		80
#define SERV_PORT 		8000
#define BACKLOG  		30


int main(int argc ,char *argv[])
{
	struct sockaddr_in      servaddr, cliaddr;
	socklen_t               cliaddr_len;
	int                     listenfd, connfd;
	char buf[7000];
	int i;
	int len;
	FILE *fp;

	if((listenfd = socket(AF_INET, SOCK_STREAM, 0)) < 0)
	{
		perror("socket");
		exit(1);
	}

	bzero(&servaddr, sizeof(servaddr));
	servaddr.sin_family = AF_INET;
	servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
	servaddr.sin_port = htons(SERV_PORT);

	if(bind(listenfd, (struct sockaddr*)&servaddr, sizeof
				(servaddr)) < 0)
	{
		perror("bind");
		exit(1);
	}

	if(listen(listenfd, BACKLOG) < 0)
	{
		perror("listen");
		exit(1);
	}
	else
	{
		printf("listen ok!!!\n");	
	}
	while (1) 
	{
		if((connfd = accept(listenfd,(struct sockaddr *)&cliaddr,&cliaddr_len)) < 0)
		{
			perror("accept!!!");
		}
		bzero(&buf,sizeof(buf));
		read(connfd,&i,4);
		if(i == 0)
		{
			read(connfd,&len,4);
			read(connfd,buf,len);
			printf("filepath = %s\n",buf);
			if((fp = fopen(buf,"w+")) == NULL)
			{
				perror("fopen");
			}
				
		}
		else if(i == -1)
		{
			fclose(fp);
		}
		else
		{
			read(connfd,&len,4);
			read(connfd,buf,len);
			fwrite(buf,1,len,fp);
		}
		
		printf("包:%d-----len:%d\n",i,len);
		close(connfd);
	}


	return 0;
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值