簡單網路通訊03

2021-10-05 11:43:48 字數 3956 閱讀 3423

client03

#define win32_lean_and_mean

#define _crt_secure_no_warnings

#include

#include

#include

#include

using namespace std;

#pragma comment(lib,"ws2_32.lib")//動態鏈結庫

//可以在屬性的鏈結庫中新增

enum cmd;

struct dataheader

char username[32];

char password[32];

};struct loginresult :public dataheader

int result;

struct logout :public dataheader

char username[32];

};struct logoutresult :public dataheader

int result;

int main1_4();

_sin.sin_family = af_inet;

_sin.sin_port = htons(4567);//host to net unsigned short

_sin.sin_addr.s_un.s_addr = inet_addr("127.0.0.1");

int ret = connect(sock, (sockaddr*)&_sin, sizeof(sockaddr_in));

if (socket_error == ret)

printf("繫結網路埠失敗。。。");

while (true);

cout << "傳送資料給伺服器:" << endl;

scanf("%s", cmdbuf);

// 4、處理請求命令

if (0 == strcmp(cmdbuf, "exit"))

else if (0 == strcmp(cmdbuf, "login"))

;recv(sock, (char*)&loginret, sizeof(loginret), 0);

printf("loginresult:%d\n", loginret.result);

}else if (0 == strcmp(cmdbuf, "logout"));

recv(sock, (char*)&logoutret, sizeof(logoutret), 0);

printf("loginresult:%d\n", logoutret.result);

}else

}// 7、關閉套接字

closesocket(sock);

wsacleanup();

system("pause");

return 0;

}server03

#define win32_lean_and_mean

#include

#include

#include

#pragma comment(lib,"ws2_32.lib")//動態鏈結庫

//可以在屬性的鏈結庫中新增

enum cmd;

struct dataheader

char username[32];

char password[32];

};struct loginresult :public dataheader

int result;

struct logout:public dataheader

char username[32];

};struct logoutresult:public dataheader

int result;

int main1_3();

_sin.sin_family = af_inet;

_sin.sin_port = htons(4567);//host to net unsigned short

_sin.sin_addr.s_un.s_addr = inet_addr("127.0.0.1");

if (socket_error == bind(sock, (sockaddr*)&_sin, sizeof(sockaddr_in)))

printf("繫結網路埠失敗。。。");

//3、listen 監聽埠

if (socket_error == listen(sock, 5))

printf("監聽網路埠失敗。。。");

//4、accept 等待客戶端連線

sockaddr_in clientaddr = {};

int naddrlen = sizeof(sockaddr_in);

socket _csocket = invalid_socket;

char msgbuf = "hello, i am server...";

_csocket = accept(sock, (sockaddr*)&clientaddr, &naddrlen);

if (invalid_socket == _csocket)

printf("新客戶端加入:socket=%d,ip=%s\n", (int)_csocket, inet_ntoa(clientaddr.sin_addr));

while (true);

//5、接收客戶端請求資料

int nlen = recv(_csocket, (char*)&header, sizeof(header), 0);

if (nlen <= 0)

printf("收到客戶端的資訊為:%d ,資料長度為%d\n", header.cmd, header.datalength);

//6、處理請求

switch (header.cmd);

recv(_csocket, (char*)&login + sizeof(dataheader), sizeof(login)-sizeof(dataheader), 0);

printf("收到命令:cmd_login,資料長度:%d  username:%s password:%s \n", login.datalength ,login.username,login.password);

printf("姓名為:%s上線了。。。\n", login.username);

loginresult ret;

send(_csocket, (char*)&ret, sizeof(loginresult), 0);

break;

}case cmd_logout:;

recv(_csocket, (char*)&logout + sizeof(dataheader), sizeof(logout)-sizeof(dataheader), 0);

printf("收到命令:cmd_logout,資料長度:%d  username:%s \n", logout.datalength, logout.username);

printf("姓名為:%s 已下線。。。\n", logout.username);

logoutresult ret;

send(_csocket, (char*)&ret, sizeof(logoutresult), 0);

break;

default:

header.cmd = cmd_error;

header.datalength = 0;

send(_csocket, (char*)&header, sizeof(header), 0);

printf("傳送成功\n");

// 6、關閉套接字

closesocket(sock);

wsacleanup();

printf("已退出,任務結束");

system("pause");

return 0;

}

網路通訊過程 簡單版

說明 要求 實現上述程式 參考 import socket def send msg udp socket 獲取鍵盤資料,並將其傳送給對方 1.從鍵盤輸入資料 msg input n請輸入要傳送的資料 2.輸入對方的ip位址 3.輸入對方的port dest port int input n請輸入對...

簡單網路通訊的小結

ip位址 計算機在網路上的唯一標識 127.0.0.1 環迴位址 埠 計算機上應用或服務的唯一標識。範圍 1 65535 我們自己的應用程式盡可能使用10000之後的埠 通訊協議 通訊雙方的一種約定 tcp ip族 這是一套協議,而不是乙個協議 tcp ip協議棧 這是一套軟體,實現tcp id標準...

網路通訊簡單了解

本文不研究這些,只是為了理解,寫一篇文章出來自己看。osi和tcp ip 資料通訊時,從上到下將資料一層一層封包 封裝資料 到達另一台電腦時,從下到上一層一層拆包 將封包開啟 tcp ip osi作用 白話 裝置 功能 傳輸資料 應用層應用層 哪個應用發出的?封 表示層 發出的資料什麼型別 封 會話...