[Windows网络编程课设]南工程聊天室服务器源码

本文档介绍了Windows环境下进行网络编程的一个实践案例,详细讲解了南工程聊天室服务器的源码结构,包括MyMsg.h和TalkClientService.h两个关键文件的内容,适合对网络编程和服务器开发感兴趣的读者学习。
摘要由CSDN通过智能技术生成

南工程聊天室服务器源码

MyMsg.h:

#pragma once
/************************************************************
*  文件名:MyMsg.h
*  描述:  服务器和客户端共用的头文件,消息定义
*************************************************************/
#ifndef _MYMSG_H_
#define _MYMSG_H_

enum {
	LOGIN_MSG,           //登录
	LOGIN_MSG_RES,       //登录响应
	QUERY_FQQ,           //查询单个好友QQ
	QUERY_FQQ_RES,       //查询单个好友QQ的响应
	TALK_MSG,             //聊天
	REQUEST_ALL_FRD,      //请求所有qq好友信息
	APPLY_ALL_FRD        //应答所有qq好友信息
};

struct LoginMsg {
	unsigned char id;  //消息编号
	char qq[6];        //登录ID号
};

struct LoginMsgResponse {
	unsigned char id;  //消息编号
	unsigned char isOK;
	char reason[100];    //如果失败,则在此写入失败原因
};

struct FriendQqMsg {
	unsigned char id;  //消息编号
	char qq[6];
};

struct FriendQqMsgResponse {
	unsigned char id;  //消息编号
	unsigned char isOK;
};

struct TalkMsg {
	unsigned char id;  //消息编号
	char qq[6];
	char fqq[6];
	char info[200];
};

struct RequestAllFriend {
	unsigned char id;   //消息编号
};

struct AllFriendMsg {
	unsigned char id;  //消息编号
	char qq[6];
};

#endif

MyTcp.cpp

/************************************************************
*  文件名:MyTCP.cpp
*  描述:  TCP/IP通信socket封装
*************************************************************/
#include <stdio.h>
#include <WinSock2.h>
#include "MyTools.h"
#pragma comment (lib, "ws2_32.lib")

#define PORT 5001
int ls;   //侦听套接字
int flag;//记录服务器或是客户端的标志

		 /*   描述: 初始化服务器或客户端, 该函数在使用中必需首先调用,客户端和服务器 */
int initSock(int IsServer)
{
	WSADATA data;

	if (WSAStartup(1, &data) <0)
		printMsgExit("call WSAStartup() failure!");

	ls = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
	if (ls < 0)
		printMsgExit("创建套接字失败!");

	flag = IsServer;
	if (IsServer != 0)
	{//服务器
		struct sockaddr_in servAddr;
		memset(&servAddr, 0, sizeof(servAddr));
		servAddr.sin_family = AF_INET;
		servAddr.sin_addr.s_addr = htonl(INADDR_ANY);
		servAddr.sin_port = htons(PORT);

		if (bind(ls, (struct sockaddr *)&servAddr, sizeof(servAddr))<0) {
			printMsg("bind套接字失败!\n");
			return -1;
		}

		if (listen(ls, 10)<0) {
			printMsg("listen套接字失败!\n");
			return -1;
		}
	}

	return 0;
}

/*   描述: 仅用于客户端, 连接服务器 */
int tcpConnect(const char *serverIP, unsigned short port)
{
	struct sockaddr_in servAddr;

	memset(&servAddr, 0, sizeof(servAddr));
	servAddr.sin_family = AF_INET;
	servAddr.sin_addr.s_addr = inet_addr(serverIP);
	servAddr.sin_port = htons(port);

	if (connect(ls, (struct sockaddr *)&servAddr, sizeof(servAddr))<0)
	{
		printMsgExit("连接服务器失败!\n");
	}

	return ls;
}

/* 描述: 发送数据 */
int tcpSend(unsigned int sock, const char *sendBuf, int sendBufLen)
{
	int len = send(sock, sendBuf, sendBufLen, 0);
	return len;
}

/* 描述: 接收数据 */
int tcpRecv(unsigned int sock, char *recvBuf, int recvBufLen)
{
	int len = recv(sock, r
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值