基于tcp进程创建的聊天的小程序

功能介绍

一个服务器与多用户之间课同时交流

所用到的知识点

子函数、线程、进程间通信..........

一言不和先整个代🐎

关于服务器  ser.c

#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <unistd.h>
#include <arpa/inet.h>

int init_net(unsigned short port);
int do_work(int connfd);

int main(int argc, const char *argv[])
{
	int serfd = -1;
	serfd = init_net(7777);
	if(serfd < 0)
	{
		puts("init net error");
		return -1;
	}
	puts("init net success");

	while(1)
	{
		int connfd = -1;
		struct sockaddr_in mycli;
		int len = sizeof(mycli);

		connfd = accept(serfd,(struct sokaddr *)&mycli,&len);
		if(connfd > 0)
		{
			pid_t pid  = fork();
			if(pid == 0)
			{
				do_work(connfd);
			}
		}
		
	}


	return 0;
}

int init_net(unsigned short port)
{

	int myserfd = socket(AF_INET,SOCK_STREAM, 0);
	if(myserfd < 0)
	{
		puts("socket error");
		return -1;
	}

	struct sockaddr_in myser;
	myser.sin_family = AF_INET;
	myser.sin_port = htons(port);
	myser.sin_addr.s_addr = htonl(INADDR_ANY);
	int ret = bind(myserfd, (struct sockaddr *)&myser, sizeof(myser));
	if(ret != 0)
	{
		puts("bind error");
		return -1;
	}

	ret = listen(myserfd, 5);
	if(ret != 0)
	{
		puts("listen error");
		return -1;
	}
	return myserfd;

}

int do_work(int connfd)
{
	if(connfd < 0)
	{
		return -1;
	}
	char buf[50];
	while(1)
	{
		memset(buf, 0, sizeof(buf));
		int ret = recv(connfd, buf, sizeof(buf), 0);
		if(ret > 0)
		{
			puts(buf);
			send(connfd, buf, sizeof(buf), 0);
		}
		if(ret == 0)
		{
			break;
		}
	}
}

关于客户端 cli.c

#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>

int main(int argc, const char *argv[])
{
	//socket
	int sockfd = socket(AF_INET, SOCK_STREAM, 0);
	if(sockfd < 0)
	{
		puts("socket error");
		return -1;
	}
	puts("socket success");
	//connet
	struct sockaddr_in myser;
	myser.sin_family = AF_INET;
	myser.sin_port = htons(7777);
	myser.sin_addr.s_addr = inet_addr("127.0.0.1");

	int ret = connect(sockfd, (struct sockaddr *)&myser,sizeof(myser));
	if(ret != 0)
	{
		puts("connet server error");
		close(sockfd);
		return -1;
	}
	puts("connet server success");

	//do ioop  send/recv
	
	char buf[50];
	while(1)
	{
		memset(buf, 0, sizeof(buf));
		gets(buf);
		send(sockfd, buf, sizeof(buf), 0);
		memset(buf, 0, sizeof(buf));
		ret = recv(sockfd, buf, sizeof(buf), 0);
		if(ret > 0)
		{
			puts(buf);
		}
		else if(ret == 0)
		{
			break;
		}
	}
	//close 
	close(socket);
	
	return 0;
}

有问题欢迎私聊我,100%回复,但不一定能解决《《《《《《潜😀》》》》》》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值