伺服器端
// 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伺...