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作用 白話 裝置 功能 傳輸資料 應用層應用層 哪個應用發出的?封 表示層 發出的資料什麼型別 封 會話...