tcp-winsock-socket套接字消息互传">C/C++ TCP winsock socket套接字/消息互传
—-server端代码
//server
#include <iostream>
#include <stdio.h>
#include <WinSock2.h>
#include <time.h>
using namespace std;
#pragma comment(lib, "ws2_32.lib")
#define buf 1460
void systime();
int main(int argc, char* argv[])
{
WSADATA wsadata;
int RWSU = WSAStartup(MAKEWORD(2, 2), &wsadata);
if (RWSU != 0)
{
cout << "初始化失败" << endl;
return 0;
}
//socket
SOCKET s;
s = socket(AF_INET, SOCK_STREAM, 0);
if (s == INVALID_SOCKET)
{
cout << "创建套接字失败" << WSAGetLastError() << endl;
return -1;
}
//创建服务器端的地址结构
struct sockaddr_in s_in;
s_in.sin_family = AF_INET;
s_in.sin_port = htons(5111);
s_in.sin_addr.s_addr = htonl(INADDR_ANY);
//sin.sin_zero[8] = 0;
int bindResult = bind(s, (sockaddr*)&s_in, sizeof(sockaddr));
if (bindResult != 0)
{
cout << "绑定套接字失败"<< WSAGetLastError()<< endl;
return -1;
}
//listen()
int listenResult = listen(s, 5);
if (listenResult != 0)
{
cout << "listen error()" << WSAGetLastError() << endl;
return -1;
}
SOCKET ss;
sockaddr_in c_in;
int addrlen = sizeof(sockaddr);
ss = accept(s, (sockaddr*)&c_in, &addrlen);
if (ss == INVALID_SOCKET)
{
cout << "accept套接字失败" << WSAGetLastError() << endl;
return -1;
}
closesocket(s);
while (true)
{
char recvf[buf];
memset(recvf, 0, buf);
int Rrecv = recv(ss, recvf, buf, 0);
if (Rrecv == SOCKET_ERROR)
{
cout << "接收失败" << WSAGetLastError()<< endl;
return -1;
}
SYSTEMTIME st;
cout << "来自客户端的消息("; systime(); cout << endl;
cout << recvf << endl;
if (strcmp(recvf, "exit") == 0)
break;
cout << "请输入要发送的消息" << endl;
char sendmessage[buf];
memset(sendmessage, 0, sizeof(sendmessage));
cin >> sendmessage;
int sendResult = send(ss, sendmessage, sizeof(sendmessage), 0);
if (sendResult == SOCKET_ERROR)
{
cout << "server 发送失败" << WSAGetLastError() << endl;
return -1;
}
else
cout << "消息成功发送("; systime(); cout << endl;
if (strcmp(sendmessage, "exit") == 0)
break;
}
Sleep(1000);
int RClo = closesocket(ss);
if (RClo != 0)
{
cout << "close socket error" << WSAGetLastError() << endl;
return 0;
}
//WSACleanup();
int RWCU = WSACleanup();
if (RWCU != 0)
{
cout << "注销失败" << WSAGetLastError() << endl;
return 0;
}
return 0;
}
void systime()
{
time_t rawtime;
struct tm * timeinfo;
time(&rawtime);
timeinfo = localtime(&rawtime);
cout << asctime(timeinfo);
}
—-cilent客户端代码
//cilent
#include <iostream>
#include <Winsock2.h>
#include <stdio.h>
#include <time.h>
using namespace std;
#pragma comment(lib, "ws2_32.lib")
#define buf 1460
void systime();
int main()
{
char send_message[buf];
memset(send_message, 0, buf);
//初始化winsock
WSADATA wsadata;
WSAStartup(MAKEWORD(2, 2), &wsadata);
int RWSU = WSAStartup(MAKEWORD(2, 2), &wsadata);
if (RWSU != 0)
{
cout << "初始化失败" << endl;
return 0;
}
//创建SOCKET
SOCKET s;
s = socket(AF_INET, SOCK_STREAM, 0);
if (s == INVALID_SOCKET)
{
cout << "创建套接字失败" << WSAGetLastError() << endl;
return -1;
}
//IP地址,填写要链接的服务器的地址
//const char FAR* cp = "127.0.0.1";
struct sockaddr_in s_in;
s_in.sin_family = AF_INET;
s_in.sin_port = htons(5111);
s_in.sin_addr.s_addr = inet_addr("127.0.0.1");
//connect
int connectResult = connect(s, (struct sockaddr*)&s_in, sizeof(sockaddr));
if (connectResult != 0)
{
cout << "connect socket error" << WSAGetLastError() << endl;
return -1;
}
while (TRUE)
{
cout << "请输入要发送的信息" << endl;
cin >> send_message;
int sendResult = send(s, send_message, sizeof(send_message), 0);
if (sendResult == SOCKET_ERROR)
{
cout << "发送失败"<< WSAGetLastError() << endl;
return -1;
}
cout << "信息成功发送("; systime(); cout << endl;
if (strcmp(send_message, "exit") == 0)
break;
char recvmessage[buf];
memset(recvmessage, 0, sizeof(recvmessage));
int recvResult = recv(s, recvmessage, sizeof(recvmessage), 0);
if (recvResult == SOCKET_ERROR)
{
cout << "信息接收失败" << WSAGetLastError() << endl;
return -1;
}
else
{
cout << "来自服务器端的消息("; systime(); cout << endl;
cout << recvmessage << endl;
}
if (strcmp(recvmessage, "exit") == 0)
break;
}
Sleep(1000);
//close
int RClo = closesocket(s);
if (RClo != 0)
{
cout << "close socket error" << WSAGetLastError() << endl;
return -1;
}
//WSACleanup()
int RWCU = WSACleanup();
if (RWCU != 0)
{
cout << "注销失败" << WSAGetLastError() << endl;
return -1;
}
return 0;
}
void systime()
{
time_t rawtime;
struct tm * timeinfo;
time(&rawtime);
timeinfo = localtime(&rawtime);
cout << asctime(timeinfo);
}
运行截图