#include <iostream>
using namespace std;
#include <stdio.h>
#include <string.h>
#include <WINSOCK2.H>
#include <process.h> /* _beginthread, _endthread */
#pragma comment(lib,"ws2_32.lib")
SOCKET sock, opponentSock;
struct sockaddr_in sa;
struct sockaddr_in cliaddr;
int len;
int err;
int servport = 5555;
void ServeSocktInit(); //服务器初始化
void ClientSocktInit(char *strip); //客户端初始化
void serverRecv(void* pParams);
void clientRecv(void* pParams);
void sSendMsg(char* sMessage);
void cSendMsg(char* cMessage);
void main()
{
int choice;
cout<<"(1):创建服务器.\n(2):连接服务器."<<endl;
cin>>choice;
if(choice == 1)//运行服务端
{
ServeSocktInit();
while(1)
{
char send[256];
cout<<"输入对话:";
cin>>send;
sSendMsg(send);
}
}
if(choice == 2)//运行客户端
{
ClientSocktInit("127.0.0.1");
while(1)
{
char data[256];
cout<<"输入对话:";
cin>>data;
cSendMsg(data);
}
}
}
//初始化SOCKET..
void ServeSocktInit() //放在游戏初始化中
{
WSADATA wsd;
if(WSAStartup(MAKEWORD(1, 1), &wsd) != 0)
{
MessageBox(0, "WSAStartup", "Warning", MB_ICONWARNING);
return ;
}
//socket..
sock = socket(AF_INET, SOCK_STREAM, 0);
if(sock == INVALID_SOCKET)
{
MessageBox(0, "socket error!", "Warning", MB_ICONWARNING);
return ;
}
memset(&sa, 0, sizeof(sa));
sa.sin_family=AF_INET;
sa.sin_port=htons(servport);
sa.sin_addr.S_un.S_addr=htonl(INADDR_ANY);
//bind..
err = bind(sock, (const sockaddr *)&sa, sizeof(sa));
if(err != 0)
{
MessageBox(0, "bind error!", "Warning", MB_ICONWARNING);
return ;
}
//listen..
err = listen(sock, 1);
if(err != 0)
{
MessageBox(0, "listen error!", "Warning", MB_ICONWARNING);
return ;
}
//执行多线程..
_beginthread(serverRecv, 0, NULL); //serverRecv..
}
void ClientSocktInit(char *strip) //放在游戏初始化中
{
WSADATA wsd;
if(WSAStartup(MAKEWORD(1, 1), &wsd) != 0)
{
MessageBox(0, "WSAStartup", "Warning", MB_ICONWARNING);
return ;
}
//socket..
sock = socket(AF_INET, SOCK_STREAM, 0);
if(sock == INVALID_SOCKET)
{
MessageBox(0, "socket error!", "Warning", MB_ICONWARNING);
return ;
}
sa.sin_family=AF_INET;
sa.sin_port=htons(servport);
sa.sin_addr.S_un.S_addr=inet_addr(strip);
//connect..
err = connect(sock, (const sockaddr *)&sa, sizeof(sa));
if(err != 0)
{
MessageBox(0, "connect error!", "Warning", MB_ICONWARNING);
return ;
}
else
{
//执行多线程..
_beginthread(clientRecv, 0, NULL); //clientRecv..
}
}
//服务端接收数据..
void serverRecv(void* pParams)
{
char buff[256];
char errorStr[10];
len = sizeof(cliaddr);
opponentSock = accept(sock, (struct sockaddr *)&cliaddr, &len); //接收连接..
if(opponentSock == INVALID_SOCKET)
{
MessageBox(0, "accept error!", "Warning", MB_ICONWARNING);
closesocket(sock);
_endthread();
return;
}
else
{
while(1) //循环..
{
memset(buff, 0, sizeof(buff));
if(recv(opponentSock, buff, sizeof(buff), 0) == SOCKET_ERROR) //接收..
{
strcpy(buff, "recr ");
itoa(WSAGetLastError(), errorStr, 10);
strcat(buff, errorStr);
MessageBox(0, buff, "Warning", MB_ICONWARNING);
exit(1);
}
else
{
printf("收到信息:%s\n",buff);//处理数据
}
}
}
_endthread();
}
//客户端接收数据..
void clientRecv(void* pParams)
{
char buff[256];
while(true) //循环..
{
memset(buff, 0, sizeof(buff));
if(recv(sock, buff, sizeof(buff), 0) == SOCKET_ERROR) //接收..
{
MessageBox(0, "recieve error! must exit!!", "Warning", MB_ICONWARNING);
exit(1);
}
else
{
printf("收到信息:%s\n",buff);
}
}
_endthread();
}
//服务端发送数据..
void sSendMsg(char* sMessage)
{
char buff[256];
memset(buff, 0, sizeof(buff));
strcpy(buff, sMessage);
send(opponentSock, buff, strlen(buff), 0); //发送..
}
//客户端发送数据..
void cSendMsg(char* cMessage)
{
char buff[256];
memset(buff, 0, sizeof(buff));
strcpy(buff, cMessage);
send(sock, buff, strlen(buff), 0); //发送..
}

go_ever
- 粉丝: 13
最新资源
- 基于51单片机的交通灯设计程序.doc
- 事务管理软件IPO上市咨询最新政策募投可研细分市场调查综合解决方案.docx
- 医院基本建设项目管理.docx
- 基于51单片机蓝牙开关控制家电系统.doc
- 专门画流程图的软件叫什么.pdf
- 概预算培训(项目管理及工程造价).ppt
- 谭浩强c语言第一章.ppt
- 项目管理系统体系框架.pdf
- 项目Hadoop环境的搭建与管理.pptx
- 使用计算机的一些常用英文和快捷键.docx
- 双向网络施工规范.doc
- 欢跃数码圣传网络游戏开发及运营项目商业计划书.doc
- 项目管理亮点赏析.ppt
- 利用可交易电子路票实现交通网络的帕雷托改善.doc
- 云计算平台可行性分析------.pdf
- 项目管理各阶段的文档模版汇总版.doc
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈



- 1
- 2
- 3
前往页