Linux多人聊天(一)

多人聊天室算是socket网络编程中比较基础的一个功能了,它主要由服务器和客户端两部分组成。其中客户端比较容易实现,只需要完成发送和接收消息的功能,而服务器则需要对每个客户端发送的数据进行分析,判断出消息的类型,从而决定是保存,删除还是转发。下面进行具体的说明:(基于TCP协议)

客户端:

预编译和全局变量的声明:

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

#define MAX_name 50      
#define MAX_mess 1024 

int fd; 
char recvs[MAX_mess];

创建和连接套接口:

char pre_name[55]={"NAME_C*"}; //姓名前缀,标识用户信息
if(argc<=2)
{
	printf("%s ip_address port_number!!\n",argv[0]);
	exit(1);
}
int port=atoi(argv[2]);
const char *ip=argv[1];
if((fd=socket(AF_INET,SOCK_STREAM,0))==-1)  //创建套接口描述字
{
	printf("socket() error!!\n");
	exit(1);
}
memset(&server,0,sizeof(struct sockaddr));  //填充server信息
server.sin_family=AF_INET;
server.sin_port=htons(port);	
inet_pton(AF_INET,ip,&server.sin_addr);
if(connect(fd,(struct sockaddr*)&server,sizeof(struct sockaddr))==-1)
{
	printf("connect error!!\n");
	exit(1);
}
printf("please input your name:");
fgets(name,sizeof(name),stdin);
strcat(pre_name,name);
send(fd,pre_name,strlen(pre_name),0);

这一部分算是连接前的准备部分了,首先在打开客户端时应该指定服务器的ip地址与端口号,并将其存入struct sockaddr_in结构体中,接着申请一个socket,将之与服务器相连(客户端的socket会自动bind()),连接成功后输入一个用户名作为在聊天室中的一个标识,而NAME_C*前缀则是为了方便服务器区分消息的类型。

发送消息:

while(1)
{
	char pre_mess[1030]={"MESS_C*"};  //消息内容前缀
	memset(sends,'\0',sizeof(sends));
	fgets(sends,sizeof(sends),stdin);
	if(!strcmp(sends,"exit!\n"))
	{
		send(fd,sends,strlen(sends),0);
		printf("you choose to exit!!\n");
		close(fd);
		e
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值