TCP服务器
// TcpServer.cpp
#include <iostream>
#include <cstring>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
#define PORT 8080
#define IP "192.168.216.128"
#define BACKLOG 5
using namespace std;
int main()
{
// 创建TcpServer套接字
int serverSocket = socket(AF_INET, SOCK_STREAM, 0);
if(serverSocket == -1)
{
cout << "创建套接字失败" << endl;
return -1;
}
cout << "创建套接字成功" << endl;
// 绑定地址
struct sockaddr_in serverAddr;
serverAddr.sin_family = AF_INET;
serverAddr.sin_port = htons(PORT);
serverAddr.sin_addr.s_addr = inet_addr(IP);
int ret = bind(serverSocket, (struct sockaddr *)&serverAddr, sizeof(serverAddr));
if(ret == -1)
{
cout << "绑定地址失败" << endl;
return -1;
}
cout << "绑定地址成功" << endl;
// 监听
ret = listen(serverSocket, BACKLOG);
if(ret == -1)
{
cout << "监听失败" << endl;
return -1;
}
cout << "监听成功" << endl;
// 接受客户端连接
struct sockaddr_in clientAddr;
socklen_t clientAddrLen = sizeof(clientAddr);
int clientSocket = accept(serverSocket, (struct sockaddr *)&clientAddr, &clientAddrLen);
if(clientSocket == -1)
{
cout << "接受客户端连接失败" << endl;
return -1;
}
cout << "接受客户端连接成功" << endl;
// 通信
char buf[1024];
while(1)
{
memset(buf, 0, sizeof(buf));
ret = recv(clientSocket, buf, sizeof(buf), 0);
if(ret <= 0)
{
cout << "接收数据失败" << endl;
break;
}
cout << "接收数据成功:" << buf << endl;
if(strcmp(buf, "exit") == 0)
{
break;
}
memset(buf, 0, sizeof(buf));
cout << "请输入发送的数据:" << endl;
cin >> buf;
ret = send(clientSocket, buf, strlen(buf), 0);
if(ret <= 0)
{
cout << "发送数据失败" << endl;
break;
}
cout << "发送数据成功" << endl;
}
cout << "通信结束" << endl;
// 关闭套接字
close(clientSocket);
close(serverSocket);
return 0;
}
TCP客户端
// TcpClient.cpp
#include <iostream>
#include <cstring>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
#define PORT 8080
#define IP "192.168.216.128"
using namespace std;
int main(int argc, char *argv[])
{
// 创建TcpClient套接字
int clientSocket = socket(AF_INET, SOCK_STREAM, 0);
if (clientSocket == -1)
{
cout << "创建套接字失败" << endl;
return -1;
}
cout << "创建套接字成功" << endl;
// 连接服务器
struct sockaddr_in serverAddr;
serverAddr.sin_family = AF_INET;
serverAddr.sin_port = htons(PORT);
serverAddr.sin_addr.s_addr = inet_addr(IP);
int ret = connect(clientSocket, (struct sockaddr *)&serverAddr, sizeof(serverAddr));
if (ret == -1)
{
cout << "连接服务器失败" << endl;
return -1;
}
cout << "连接服务器成功" << endl;
// 通信
char buf[1024];
while (1)
{
memset(buf, 0, sizeof(buf));
cout << "请输入发送的数据:" << endl;
cin >> buf;
ret = send(clientSocket, buf, strlen(buf), 0);
if (ret <= 0)
{
cout << "发送数据失败" << endl;
break;
}
cout << "发送数据成功" << endl;
// 接收数据
memset(buf, 0, sizeof(buf));
ret = recv(clientSocket, buf, sizeof(buf), 0);
if (ret <= 0)
{
cout << "接收数据失败" << endl;
break;
}
cout << "接收数据成功:" << buf << endl;
if (strcmp(buf, "exit") == 0)
{
break;
}
}
cout << "通信结束" << endl;
// 关闭套接字
close(clientSocket);
return 0;
}
运行结果
服务端
客户端