tcp/ip经服务器计算字节长度

服务端  tcp_server.c

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <unistd.h>
#include <linux/in.h>
void process_conn_server(int s)
{
	ssize_t size = 0;
	char buffer[1024];
	for(;;)
	{
		size = read(s,buffer, 1024);

		if( size == 0)
		{
			return;
		}

		sprintf(buffer,"%d bytes altogether\n", size);
		write(s , buffer, strlen(buffer)+1);
	}
}
int main(int agrc, char* argv[])
{
	int ss,sc;
	struct sockaddr_in server_addr;
	struct sockaddr_in client_addr;
	int err;
	pid_t pid;
	ss = socket(AF_INET, SOCK_STREAM, 0);
	if (ss < 0)
	{
		printf("socket error\n");
		return -1;
	}

	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(8888);

	err = bind(ss, (struct sockaddr*)&server_addr, sizeof(server_addr));
	if (err < 0)
	{
		printf("bind error\n");
		return -1;
	}

	err = listen(ss, 2);
	if (err < 0)
	{
		printf("listen error\n");
		return -1;
	}
	
	for(;;)
	{
		int addrlen = sizeof(struct sockaddr);
		sc = accept(ss, (struct sockaddr*)&client_addr, &addrlen);
		if(sc < 0)
		{
			continue;
		}
		pid = fork();
		if( pid == 0)
		{
			close(ss);
			process_conn_server(sc);
		}else
		{
			close(sc);
		}
	}
	return 0;
}	

客户端 client.c

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <unistd.h>
#include <linux/in.h>

void process_conn_client(int s)
{
	ssize_t size = 0;
	char buffer[1024];
	for(;;)
	{
		size = read(0 , buffer, 1024);
		if(size > 0)
		{
			write(s, buffer, size);
			size = read(s, buffer, 1024);
			write(1, buffer, size);
		}
	}
}
int main()
{
	int s;
	struct sockaddr_in server_addr;
	int err;

	s = socket(AF_INET, SOCK_STREAM, 0);
	if( s < 0 )
	{
		printf("socket error\n");
		return -1;
	}

	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(8888);

	inet_pton(AF_INET, "127.0.0.1", &server_addr.sin_addr);
	connect(s, (struct sockaddr*)&server_addr, sizeof(struct sockaddr));
	process_conn_client(s);
	close(s);
	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值