// Server.cpp : Defines the entry point for the console application.
// Author:Mandy 20161027
#include "winsock2.h"
#pragma comment(lib, "ws2_32.lib")
#include <iostream>
using namespace std;
int main(int argc, char* argv[])
{
const int BUF_SIZE = 64;
WSADATA wsd; //WSADATA变量
SOCKET sServer; //服务器套接字
SOCKET sClient; //客户端套接字
SOCKADDR_IN addrServ;; //服务器地址
struct Buf //接收数据缓冲区
{
int apple;
int orange;
int banana;
char blueberry[5];
int kiwifruit;
};
Buf Buf1;
struct sendBuf //返回给客户端数据
{
int cmd;
int sendID;
int recvID;
char name[5];
int number;
};
sendBuf sendBuf1;
int retVal; //返回值
//初始化套结字动态库
if (WSAStartup(MAKEWORD(2,2), &wsd) != 0)
{
cout << "WSAStartup failed!" << endl;
return -1;
}
//创建套接字
sServer = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if(INVALID_SOCKET == sServer)
{
cout << "socket failed!" << endl;
WSACleanup();//释放套接字资源;
return -1;
}
//服务器套接字地址
addrServ.sin_family = AF_INET;
addrServ.sin_port = htons(4999);
addrServ.sin_addr.s_addr = INADDR_ANY;
//绑定套接字
retVal = bind(sServer, (LPSOCKADDR)&addrServ, sizeof(SOCKADDR_IN));
if(SOCKET_ERROR == retVal)
{
cout << "bind failed!" << endl;
closesocket(sServer); //关闭套接字
WSACleanup(); //释放套接字资源;
return -1;
}
//开始监听
retVal = listen(sServer, 1);
if(SOCKET_ERROR == retVal)
{
cout << "listen failed!" << endl;
closesocket(sServer); //关闭套接字
WSACleanup(); //释放套接字资源;
return -1;
}
//接受客户端请求
sockaddr_in addrClient;
int addrClientlen = sizeof(addrClient);
sClient = accept(sServer,(sockaddr FAR*)&addrClient, &addrClientlen);
if(INVALID_SOCKET == sClient)
{
cout << "accept failed!" << endl;
closesocket(sServer); //关闭套接字
WSACleanup(); //释放套接字资源;
return -1;
}
while(true){
//接收客户端数据
char buf[BUF_SIZE];
memset(buf,0,BUF_SIZE);
retVal = recv(sClient,buf,sizeof(buf),0);
memset(&Buf1,0,sizeof(Buf));
memcpy(&Buf1,buf,sizeof(Buf));
if (SOCKET_ERROR == retVal)
{
cout << "recv failed!" << endl;
closesocket(sServer); //关闭套接字
closesocket(sClient); //关闭套接字
WSACleanup(); //释放套接字资源;
return -1;
}
//接收客户端数据
cout << "从客户端接收的数据:" <<Buf1.apple << Buf1.orange<<Buf1.banana<<Buf1.blueberry << Buf1.kiwifruit <<endl;
cout << "向客户端发送数据:" ;
cin >> sendBuf1.cmd >> sendBuf1.sendID >> sendBuf1.recvID >>sendBuf1.name >>sendBuf1.number ;
int len_send = send(sClient,(char *)&sendBuf1,sizeof(sendBuf),0);
}
//退出
closesocket(sServer); //关闭套接字
closesocket(sClient); //关闭套接字
WSACleanup(); //释放套接字资源;
return 0;
}
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
TCP结构体双向通讯.zip (58个子文件)
TCP结构体双向通讯
TCPServ
TCPServ
TCPServ.vcxproj.user 143B
TCPServ.vcxproj 3KB
Debug
cl.command.1.tlog 500B
TCPServ.log 2KB
CL.read.1.tlog 21KB
vc100.idb 539KB
mt.read.1.tlog 572B
link.read.1.tlog 3KB
TCPServ.write.1.tlog 0B
link.write.1.tlog 420B
CL.write.1.tlog 240B
mt.read.2.tlog 14KB
vc100.pdb 284KB
TCPServ.obj 91KB
TCPServ.lastbuildstate 42B
link.command.1.tlog 1KB
mt.write.1.tlog 200B
mt.command.1.tlog 376B
TCPServ.vcxprojResolveAssemblyReference.cache 713B
TCPServ.exe.intermediate.manifest 381B
TCPServ.cpp 4KB
TCPServ.vcxproj.filters 945B
Debug
TCPServ.pdb 691KB
TCPServ.ilk 478KB
TCPServ.exe 55KB
ipch
tcpserv-b05458a5
tcpserv-d1adc773.ipch 42.94MB
TCPServ.sln 888B
TCPServ.suo 11KB
TCPServ.sdf 20.14MB
TCPClient
Debug
TCPClient.pdb 691KB
TCPClient.exe 55KB
TCPClient.ilk 475KB
ipch
tcpclient-392a4d02
tcpclient-d8299d2.ipch 42.94MB
TCPClient.sln 894B
TCPClient.sdf 26.96MB
TCPClient
Debug
cl.command.1.tlog 524B
TCPClient.lastbuildstate 44B
CL.read.1.tlog 21KB
TCPClient.exe.intermediate.manifest 381B
vc100.idb 571KB
mt.read.1.tlog 592B
link.read.1.tlog 3KB
TCPClient.write.1.tlog 0B
link.write.1.tlog 468B
CL.write.1.tlog 272B
TCPClient.log 2KB
TCPClient.vcxprojResolveAssemblyReference.cache 713B
mt.read.2.tlog 21KB
vc100.pdb 284KB
link.command.1.tlog 1KB
mt.write.1.tlog 220B
TCPClient.obj 89KB
mt.command.1.tlog 400B
TCPClient.vcxproj 3KB
TCPClient.cpp 3KB
TCPClient.vcxproj.filters 947B
TCPClient.vcxproj.user 143B
TCPClient.suo 11KB
共 58 条
- 1
资源评论
locus321
- 粉丝: 14
- 资源: 15
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功