TCP IP的網路客戶端和伺服器端程式

2021-09-06 08:28:15 字數 2755 閱讀 5156

伺服器端

// tcpserver.cpp : 定義控制台應用程式的入口點。

//#include "stdafx.h"

#include #pragma comment(lib,"ws2_32.lib");

//#include #include using namespace std;

int _tmain(int argc, char* argv)

//(2)建立套接字

sserver = socket(af_inet, sock_stream, ipproto_tcp);

if(invalid_socket == sserver)

//(3)填寫伺服器套接字位址

addrserv.sin_family = af_inet;

addrserv.sin_port = htons(4999);

addrserv.sin_addr.s_addr = inaddr_any;//注意inaddr_any的含義

//繫結套接字

retval = bind(sserver, (lpsockaddr)&addrserv, sizeof(sockaddr_in));

if(socket_error == retval)

//開始監聽

retval = listen(sserver, 1);

if(socket_error == retval)

//接受客戶端請求

sockaddr_in addrclient;

int addrclientlen = sizeof(addrclient);

sclient = accept(sserver,(sockaddr far*)&addrclient, &addrclientlen);

if(invalid_socket == sclient)

while(true)

if(buf[0] == '0')

break;

cout << "客戶端傳送的資料: " << buf <> sendbuf;

send(sclient, sendbuf, strlen(sendbuf), 0);

} //退出

closesocket(sserver); //關閉套接字

closesocket(sclient); //關閉套接字

wsacleanup(); //釋放套接字資源;

return 0;

}

客戶端:

// tcpclient.cpp : 定義控制台應用程式的入口點。

//// tcpclient.cpp : 定義控制台應用程式的入口點。

//#include "stdafx.h"

#include "winsock2.h"

#include #pragma comment(lib, "ws2_32.lib")

using namespace std;

bool recvline(socket s, char* buf); //讀取一行資料

int main(int argc, char* argv)

//建立套接字

shost = socket(af_inet, sock_stream, ipproto_tcp);

if(invalid_socket == shost)

//設定伺服器位址

servaddr.sin_family =af_inet;// 位址族

servaddr.sin_addr.s_addr = inet_addr("127.0.0.1");//伺服器端ip位址

servaddr.sin_port = htons((short)4999);//伺服器端的埠號

int nservaddlen = sizeof(servaddr);

//連線伺服器

retval=connect(shost,(lpsockaddr)&servaddr, sizeof(servaddr));

if(socket_error == retval)

while(true)

//recvline(shost, bufrecv);

recv(shost, bufrecv,5 , 0); // 接收伺服器端的資料, 只接收5個字元

cout << endl <<"從伺服器接收資料:" << bufrecv;

} //退出

closesocket(shost); //關閉套接字

wsacleanup(); //釋放套接字資源

return 0;

}

總結:伺服器端的過程可以分為以下幾個步驟:

(1)  初始化套接字的版本資訊wsastartup

(2)建立套接字 ,需要兩個套接字及客戶端和伺服器端的套接字

(3)繫結伺服器(bind),該函式用於繫結伺服器套接字

(4)監聽伺服器(listen),該函式 用於監聽伺服器

(5)接收客戶端請求(accept) 返回值為客戶端的套接字,引數為伺服器套接字

(6)接收客戶端資料(recv)

(7)關閉套接字

客戶端的過程分為以下幾個步驟:

(1) 初始化套接字的版本資訊wsastartup

(2) 建立套接字( socket)用於連線伺服器端

(3) 與伺服器進行連線connect

(4) 設定迴圈狀態,進行接收和傳送(recv和send)

(5) 關閉套接字(closesocket)

Redis客戶端和伺服器

一 redis客戶端 redisserver結構中儲存了所有客戶端的狀態資訊。struct redisserver 命令client list可以列出目前所有連線到伺服器的客戶端。命令client setname name 可以給客戶端設定乙個名字。偽客戶端 由於伺服器必須接收來自客戶端的命令以執行...

Redis 客戶端和伺服器

客戶端的資料結構 typedef struct redisclient redisclient 名字 name 標誌值 flags 指向客戶端正在使用的資料庫的指標,以及該資料庫的號碼 當前要執行的命令 命令的引數 命令的個數,以及指向命令實現函式的指標 輸入緩衝區 querybuf 輸出緩衝區 複...

C 客戶端和伺服器端

1 c s 客戶端應用程式 winform wpf 平級 資料是存放在其他的電腦上或伺服器上 資料的加工是在使用者的電腦上執行的,會對使用者的電腦配置有所要求 2 b s 網頁端應用程式 asp.net 統稱 asp.net webform asp.net mvc 平級 使用者傳送乙個請求到iis伺...