客戶(hù)端:
#include<iostream>
#include <winsock2.h> ?
#include <ws2tcpip.h> ?
#include<stdlib.h>
using namespace std;
#define ?BUF_SIZE ?1024
int main()
{
? ? cout << "客戶(hù)端" << endl;
? ? //設(shè)置Winsock版本,
? ? WSADATA ? wsaData;
? ? if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0)
? ? {
? ? ? ? cout << "error" << endl;
? ? ? ? exit(1);
? ? }
? ? //創(chuàng)建通信套接字
? ? SOCKET ?hSocket; //創(chuàng)建用于通信的套接字
? ? char message[BUF_SIZE] = "hello world";
? ?
? ? //1,創(chuàng)建用于通信的套接字
? ? hSocket = socket(PF_INET, SOCK_STREAM, 0);
? ? if (hSocket == INVALID_SOCKET)
? ? {
? ? ? ? cout << "socket error" << endl;
? ? ? ? exit(1);
? ? }
? ? //2,連接服務(wù)器IP
? ? SOCKADDR_IN ?servAdr;
? ? memset(&servAdr, 0, sizeof(servAdr));
? ? servAdr.sin_port = htons(9999); ? ?//端口,主機(jī)轉(zhuǎn)網(wǎng)絡(luò)字節(jié)序,服務(wù)器端口
? ? servAdr.sin_family = AF_INET; ? ? ?//地址族
? ? ?wchar_t ?adr[] = L"192.168.19.1";
? ? InetPton(AF_INET, adr, &servAdr.sin_addr); // 服務(wù)器IP地址 ?
? ?
? ??
? ? //3,建立連接
? ? if (connect(hSocket, (SOCKADDR*)&servAdr, sizeof(servAdr)) == SOCKET_ERROR)
? ? {
? ? ? ? cout << "connect error" << endl;
? ? ? ? return 0;
? ? }
? ? //4,開(kāi)始循環(huán)發(fā)送
? ? while (1)
? ? {
? ? ? ? int messagelen = strlen(message);
? ? ? ? send(hSocket, message, messagelen, 0);
? ? ? ? int Len = recv(hSocket, message, BUF_SIZE - 1, 0);
? ? ? ? message[Len] = 0;
? ? ? ? for (int i = 0; i < BUF_SIZE; i++)
? ? ? ? {
? ? ? ? ? ? cout << message[i];
? ? ? ? }
? ? ? ? cout << endl;
? ? ? ? Sleep(1000);
? ? }
? ? //5,關(guān)閉套接字
? ? closesocket(hSocket);
? ? WSACleanup();
}
?
服務(wù)器端
#include<iostream>
#include<stdlib.h>
#include<winsock2.h>
using namespace std;
int ?main()
{
? ? cout << "服務(wù)器端" << endl;
? ? WSADATA ?wsaData;
? ? SOCKET hServSock; ?//監(jiān)聽(tīng)套接字
? ? SOCKET hClntSock; ?//接收(accept)套接字
? ? if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0)
? ? {
? ? ? ? cout << "WSAStartup ?error" << endl;
? ? }
? ? //1,創(chuàng)建監(jiān)聽(tīng)套接字
? ? hServSock = socket(PF_INET, SOCK_STREAM, 0);
? ? if (hServSock == INVALID_SOCKET)
? ? {
? ? ? ? cout << "申請(qǐng)發(fā)送套接字失敗" << endl;
? ? }
? ? //2 ,綁定本地IP接口
? ? SOCKADDR_IN ?servAdr;
? ? memset(&servAdr, 0, sizeof(servAdr));
? ? servAdr.sin_family = AF_INET; ? ? ?//地址族
? ? servAdr.sin_port = htons(9999); ? ?//端口,主機(jī)轉(zhuǎn)網(wǎng)絡(luò)字節(jié)序
? ? servAdr.sin_addr.s_addr = htonl(INADDR_ANY); ?//綁定本地IP
? ? if (bind(hServSock, (SOCKADDR*)&servAdr, sizeof(servAdr)) == SOCKET_ERROR)
? ? {
? ? ? ? cout << "bind error" << endl;
? ? }
? ? //3, 設(shè)置監(jiān)聽(tīng)
? ? if (listen(hServSock, 5) == SOCKET_ERROR)
? ? {
? ? ? ? cout << "listen error" << endl;
? ? }文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-861816.html
? ? //4, 阻塞等待客戶(hù)端連接
? ? SOCKADDR_IN ?clntAdr;
? ? int clntAdrSize;
? ? clntAdrSize = sizeof(clntAdr);
? ??
? ? for (int i = 0; i < 5; i++)
? ? {
? ? ? ? hClntSock = accept(hServSock, (SOCKADDR*)&clntAdr, &clntAdrSize);
? ? ? ? if (hClntSock == -1)
? ? ? ? {
? ? ? ? ? ? cout << "accept(0 error" << endl;
? ? ? ? }
? ? ? ? else
? ? ? ? {
? ? ? ? ? ? cout << "connect client " << i + 1 << endl;
? ? ? ? ? ? char message[1024];
? ? ? ? ? ? int strlen;
? ? ? ? ? ? while ((strlen = recv(hClntSock, message, 1024, 0)) != 0)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? for (int i = 0; i < strlen; i++)
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? cout << message[i];
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? cout << endl;
? ? ? ? ? ? ? ? send(hClntSock, message, strlen, 0);
? ? ? ? ? ? }
? ? ? ? }
? ? ? ? Sleep(100);
? ? ? ? closesocket(hClntSock);
? ? }
? ? closesocket(hServSock);
? ? WSACleanup();
}文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-861816.html
到了這里,關(guān)于簡(jiǎn)易TCP客戶(hù)端和服務(wù)器端通信的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!