功能描述
本博文实现一个类似qq的聊天功能,两个client端连接上服务器,不必知道对方的ip地址,就可以互相发送消息。
预备知识
**1.Linxu网络编程
2.Linux多线程同步技术**
/*
* pub.h
*
* Created on: 2016年10月30日
* Author: Allen
*/
#ifndef PUB_H_
#define PUB_H_
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <errno.h>
#include <string.h>
#include <pthread.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <signal.h>
#include <sys/types.h>
#define BUFSIZE 32768
int socket_create(int port);
void socket_accept(int listen_st);
void init_socket_client();
void deliver(int index,const char *buf,int len);
void socket_work(int index);
void *socket_contrl(void *arg);
#endif /* PUB_H_ */
/*
* pub.c
*
* Created on: 2016年10月30日
* Author: Allen
*/
#include"pub.h"
int socket_client[2]; //申明2个socket_client,设为全局变量,管理2个client的socket连接
void init_socket_client() //初始化int socket_client[2]数组
{
memset(socket_client, 0, sizeof(socket_client));
}
//接收到来自client发送的消息,index为0,代表接收到socket_client[0]消息,然后给socket_client[1]发送消息
//index为1,代表接收到socket_client[1]消息,然后给socket_client[0]发送消息
//buf为发送消息内容,len为发送消息长度
void deliver(int index, const char *buf, int len)
{
int rc = 0;
if (index == 0) //如果 index为0,代表0给1发消息
{
if (socket_client[1] == 0) //1不在线
{
printf("%d : user not online\n", index);
} else
{
rc = send(socket_client[1], buf, len, 0); //将消息下发给1
if (rc <= 0)
{
if (rc < 0)
printf("send faied %s\n", strerror(errno));
else
printf("socket disconnect %s\n", strerror(errno));
}
}
}
if (index == 1)
{
if (socket_client[0] == 0)
{
printf("%d : user not online\n", index);
} else
{
rc =