欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

linux 下的套接字编程 - 传输结束

最编程 2024-03-20 09:06:44
...

    close(sockfd);

实例代码:

server.c
/*
 * server.c
 *
 *  Created on: 2014-8-29
 *      Author: wzb
 */
 
#include "server.h"

#define temp_pathname "temp.d"
void server_process(int sockfd)
{
	char buffer[1024];
	int data_len = 0;
	FILE *f;
	if((f = fopen(temp_pathname, "w")) == NULL)
	{
		fprintf(stderr, "crete temp file %s errorn", temp_pathname);
		exit(1);
	}
	
	while((data_len = recv(sockfd, buffer, 1024, 0)) >0)
	{
		if(data_len < 1024)
			buffer[data_len] = ' ';
		fprintf(f, "%s", buffer);
	}
	fclose(f);
}

int main()
{
	int sockfd;
	int clientfd;
	uint16_t port = 10033;
	
	struct sockaddr_in server_addr, client_addr;
	bzero(&server_addr, sizeof(server_addr));
	server_addr.sin_family = AF_INET;
	server_addr.sin_addr.s_addr  = htonl(INADDR_ANY);
	server_addr.sin_port = htons(port);
	
	if((sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0)
	{
		fprintf(stderr, "open data stream socket failed!n");
		exit(1);
	}
	
	if(bind(sockfd, (struct sockaddr *)&server_addr, sizeof(server_addr)) < 0)
	{
		fprintf(stderr, "bind data socket failed!n");
		exit(1);
	}
	
	if(listen(sockfd, SOMAXCONN) < 0)
	{
		fprintf(stderr, "listen data stream failedn");
		exit(1);
	}
	
	while(1)
	{
		socklen_t len = sizeof(client_addr);
		clientfd = accept(sockfd, (struct sockaddr *)&client_addr, &len);
		if(clientfd < 0)
		{
			fprintf(stderr, "accept errorn");
			continue;
		}
		
		int pid = fork();
		if(pid == 0)
		{
			server_process(clientfd);
			exit(0);
		}
		close(clientfd);
	}
	return 0;	 
}
client.c
/*
 * client.c
 *
 *  Created on: 2014-8-29
 *      Author: wzb
 */
 
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <limits.h>

#define filename "file.d"

int main()
{
	int sockfd;
	struct sockaddr_in server_addr;
	uint16_t port = 10033;
	
	if((sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0)
	{
		fprintf(stderr, "socket eerrorn");
		exit(1);
	}
	
	bzero(&server_addr, sizeof(server_addr));
	server_addr.sin_family = AF_INET;
	server_addr.sin_port = htons(port);
	server_addr.sin_addr.s_addr = inet_addr("127.0.0.1");;
	
	if(connect(sockfd, (struct sockaddr*)(&server_addr), sizeof(struct sockaddr))<0)
	{
		fprintf(stderr, "connect eerrorn");
		return -1;
	}	
	
	FILE *f = NULL;
	if((f = fopen(filename, "r")) == NULL)
	{
		fprintf(stderr, "%s file errorn", filename);
		close(sockfd);
		exit(1);
	}
	
	char buf[LINE_MAX];
	while(fgets(buf, LINE_MAX, f))
	{
		send(sockfd, buf, strlen(buf), 0);
	}
	fclose(f);
	printf("-----------send over------------n");
	close(sockfd);
	return 0;
}

推荐阅读