C语言服务器和客户端同步聊天

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

int main(void)
{
int socket_fd = -1;
int temp_fd = -1;
char wbuff[100] = {0};

struct sockaddr_in   server_addr; // 绑定本机的IP和端口  


// 1.创建套接字 AF_INET 和 PF_INET 是一样的
socket_fd = socket(AF_INET, SOCK_STREAM, 0);
if(socket_fd < 0)
{
	printf("socket create fail!\n");
	return -1;
}

//2.设置(初始化)本机的IP和端口、协议
memset(&server_addr, 0, sizeof(server_addr));
server_addr.sin_family		= AF_INET; /*协议地址*/  
server_addr.sin_port		= htons(9999); /*将端口号转换为网络字节序*/ 
server_addr.sin_addr.s_addr	= inet_addr("127.0.0.1");     
socklen_t addrlen = sizeof(server_addr);
int ret = connect(socket_fd, (struct sockaddr *)&server_addr, addrlen);
if(ret < 0)
{
	perror("connect\n");
	return -2;
	
}

printf("连接上了服务器\n");

//
while(1)
{
	// 收发消息
	memset(wbuff, 0, sizeof(wbuff));
	scanf("%s", wbuff);
	send(socket_fd, wbuff, 100,0);
	// send
	//printf("rbuf = %s\n", wbuff);
}

return 0;

}

socket_s服务器

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

int main(void)
{
int listen_fd = -1;
int temp_fd = -1;
char rbuff[100] = {0};

struct sockaddr_in   my_addr; // 绑定本机的IP和端口  
struct sockaddr_in   src_addr; // 存放客户端的IP地址

// 1.创建套接字 AF_INET 和 PF_INET 是一样的
listen_fd = socket(AF_INET, SOCK_STREAM, 0);
if(listen_fd < 0)
{
	printf("socket create fail!\n");
	return -1;
}

//2.设置(初始化)本机的IP和端口、协议
memset(&my_addr, 0, sizeof(my_addr));
my_addr.sin_family		= AF_INET; /*协议地址*/  
my_addr.sin_port		= htons(9999); /*将端口号转换为网络字节序*/ 
my_addr.sin_addr.s_addr	= inet_addr("0.0.0.0");      /* 绑定的本机IP,0.0.0.0代表本机所有IP htonl(INADDR_ANY) 代表本机所有IP*/

// 3.绑定本机端口和IP地址、协议
int status = bind (listen_fd, (struct sockaddr *) &my_addr, sizeof(my_addr));
// 判断绑定是否成功
if(status < 0)
{
	perror("band");
	return -2;
}

// 4. 设置监听 DDOS
listen(listen_fd, 5); // 同时可以接收5个连接请求

socklen_t addrlen = sizeof(src_addr);

//5.开始监听,等待客户端链接 阻塞函数
memset(&src_addr, 0, sizeof(src_addr));
temp_fd = accept(listen_fd, (struct sockaddr *)&src_addr, &addrlen);
if(temp_fd < 0)
{
	
}
/* 多个客户端连接时要分别将新的文件描述符存起来
temp_fd2 = accept(listen_fd, (struct sockaddr *)&src_addr, &addrlen);
if(temp_fd2 < 0)
{
	
}
*/
printf("有客户端链接\n");

//
while(1)
{
	// 收发消息
	memset(rbuff, 0, sizeof(rbuff));
	recv(temp_fd, rbuff, 100, 0);
	// recv
	printf("rbuf = %s\n", rbuff);
}

return 0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值