#include<iostream>
#include "winsock2.h"
#pragma comment(lib,"ws2_32.lib")
using namespace std;
int main()
{
int RetVal;
WORD SocketVersion = MAKEWORD(2, 2);
WSADATA wsd;
if (WSAStartup(SocketVersion, &wsd) != 0)
{
cout << "绑定Socket库失败" << endl;
}
SOCKET ServerSocket;
ServerSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (ServerSocket == INVALID_SOCKET)
{
cout << "创建服务器套接字失败" << endl;
WSACleanup();
return -1;
}
SOCKADDR_IN ServerAddr;
ServerAddr.sin_family = AF_INET;
ServerAddr.sin_port = htons(6000);
ServerAddr.sin_addr.S_un.S_addr = INADDR_ANY;
RetVal = bind(ServerSocket, (SOCKADDR*)& ServerAddr, sizeof(SOCKADDR_IN));
if (RetVal == SOCKET_ERROR)
{
cout << "套接字绑定失败" << endl;
closesocket(ServerSocket);
WSACleanup();
return -1;
}
RetVal = listen(ServerSocket, 2);
if (RetVal == SOCKET_ERROR)
{
cout << "套接字监听失败" << endl;
closesocket(ServerSocket);
WSACleanup();
return -1;
}
SOCKET ClientSocket;
SOCKADDR_IN ClientAddr;
int ClientAddrLen = sizeof(ClientAddr);
ClientSocket = accept(ServerSocket, (SOCKADDR*)& ClientAddr, &ClientAddrLen);
if (ClientSocket == INVALID_SOCKET)
{
cout << "接收客户端请求失败" << endl;
closesocket(ServerSocket);
WSACleanup();
return -1;
}
char ReceiveBuff[BUFSIZ];
char SendBuff[BUFSIZ];
while (true)
{
ZeroMemory(ReceiveBuff, BUFSIZ);
RetVal = recv(ClientSocket, ReceiveBuff, BUFSIZ, 0);
if (RetVal == SOCKET_ERROR)
{
cout << "接收数据失败" << endl;
closesocket(ServerSocket);
closesocket(ClientSocket);
WSACleanup();
return -1;
}
cout << "接收自客户端数据:" << ReceiveBuff << endl;
cout << "向客户端发送数据:";
cin >> SendBuff;
send(ClientSocket, SendBuff, strlen(SendBuff), 0);
}
closesocket(ServerSocket);
closesocket(ClientSocket);
WSACleanup();
return 0;
}
#include "winsock2.h"
#include <iostream>
#include<random>
#pragma comment(lib, "ws2_32.lib")
#pragma warning(disable:4996) //必须加上
using namespace std;
BOOL RecvLine(SOCKET s, char* buf); //读取一行数据
bool ConStatus = false;
bool judgeLegalStr(const char* getData,const char* sample) {
if (strlen(getData)==0) {
return true;
}
if (strlen(getData) != strlen(sample)) {
return false;
}
for (int i = 0; i < strlen(sample); ++i) {
if (getData[i] != sample[i]) {
return false;
}
}
return true;
}
int main(int argc, char* argv[])
{
const int BUF_SIZE = 64;
WSADATA wsd; //WSADATA变量
SOCKET sHost; //服务器套接字
SOCKADDR_IN servAddr; //服务器地址
char buf[BUF_SIZE]="Java测试"; //接收数据缓冲区
char bufRecv[BUF_SIZE];
int retVal; //返回值
//初始化套结字动态库
if (WSAStartup(MAKEWORD(2, 2), &wsd) != 0)
{
cout << "WSAStartup failed!" << endl;
return -1;
}
//创建套接字
sHost = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (INVALID_SOCKET == sHost)
{
cout << "socket failed!" << endl;
WSACleanup();//释放套接字资源
return -1;
}
//设置服务器地址
servAddr.sin_family = AF_INET;
servAddr.sin_addr.s_addr = inet_addr("127.0.0.1");
servAddr.sin_port = htons((short)6000);
int nServAddlen = sizeof(servAddr);
//连接服务器
retVal = connect(sHost, (LPSOCKADDR)& servAddr, sizeof(servAddr));
if (SOCKET_ERROR == retVal)
{
cout << "connect failed!" << endl;
closesocket(sHost); //关闭套接字
WSACleanup(); //释放套接字资源
return -1;
}
cout << " 向服务器发送数据: "<<buf<<endl;
retVal = send(sHost, buf, strlen(buf), 0);
ZeroMemory(bufRecv, BUF_SIZE);
recv(sHost, bufRecv, BUF_SIZE, 0);
ConStatus = judgeLegalStr(bufRecv,"success");//得到的指令是否为success
while (ConStatus)
{
ZeroMemory(bufRecv, BUF_SIZE);
if (recv(sHost, bufRecv, BUF_SIZE, 0) == SOCKET_ERROR){
cout << "connect failed!" << endl;
closesocket(sHost); //关闭套接字
WSACleanup(); //释放套接字资源
return -1;
}
if (!(judgeLegalStr(bufRecv, "game_over"))) {
if (judgeLegalStr(bufRecv, "begin")) {
ZeroMemory(buf, BUF_SIZE);
cout << " 向服务器发送数据: ";
cin >> buf;
retVal = send(sHost, buf, strlen(buf), 0);
}
else {
cout << " 向服务器接收数据: "<< bufRecv<<endl;
}
}
else {
break;
}
}
//退出
closesocket(sHost); //关闭套接字
WSACleanup(); //释放套接字资源
return 0;
}