TCP socket客戶伺服器模式

2021-09-25 08:39:38 字數 2737 閱讀 1665

下面是大致的思路,具體細節及引數可檢視相關函式

server.cpp

#include

#include

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

#define buf_size 64

int main()

// 初始化後,呼叫socket函式建立用於監聽的socket

sserver = socket(af_inet, sock_stream, ipproto_tcp);

if (invalid_socket == sserver)

// 設定伺服器socket的監聽位址,之後將socket與改位址進行繫結

sockaddr_in addrserv;

addrserv.sin_family = af_inet;

addrserv.sin_port = htons(9990);

addrserv.sin_addr.s_un.s_addr = htonl(inaddr_any);

// 將監聽socket與要監聽的位址進行繫結

retval = bind(sserver, (const struct sockaddr*)&addrserv, sizeof(sockaddr_in));

if (socket_error == retval)

// 繫結位址後就可以呼叫listen函式進行監聽

retval = listen(sserver, 1);

if (socket_error == retval)

// 呼叫accept函式接收客戶端的連線請求

printf("tcp server start...\n");

// 獲取客戶端位址

sockaddr_in addrclient;

int addrclientlen = sizeof(addrclient);

// 建立sclient

sclient = socket(af_inet, sock_stream, ipproto_tcp);

if (invalid_socket == sclient)

// 用sclient接收客戶端請求並處理

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

if (invalid_socket == sclient)

// 接收資料

while (true)

systemtime st;

getlocaltime(&st);

char sdatetime[30];

sprintf(sdatetime, "%4d-%2d-%2d:%2d-%2d-%2d", st.wyear, st.wmonth, st.wday, st.whour, st.wminute, st.wsecond);

printf("%s,recv from client[%s:%d]:%s\n", sdatetime, inet_ntoa(addrclient.sin_addr), addrclient.sin_port, buf);

//傳送資料 如果收到客戶端傳送「quit」,則伺服器退出

if (strcmp(buf, "quit") == 0)

// 否則向客戶端傳送回顯字串

else}}

// 釋放資源

closesocket(sserver);

closesocket(sclient);

wsacleanup();    

system("pause");

return 0;

}client.cpp

#include

#include

#include

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

#define buf_size 64

int main()

// 建立用於通訊的socket

shost = socket(af_inet, sock_stream, ipproto_tcp);

if (invalid_socket == shost)

// 設定要連線的伺服器位址

servaddr.sin_family = af_inet;

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

servaddr.sin_port = htons(9990);

int sserveraddlen = sizeof(servaddr);

// 呼叫connect函式連線到伺服器

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

if (socket_error == retval)

// 接收資料

while (true)

// 接收資料

retval = recv(shost, buf, sizeof(buf)+1, 0);

printf("rec from server:%s\n", buf);

// 如果收到quit就退出

if (strcmp(buf, "quit") == 0)

// 釋放資源

closesocket(shost);

wsacleanup();

system("pause");

return 0;

}

TCP socket實現客戶端和伺服器端通訊

import socket def main 建立套接字 tcp client socket socket.socket socket.af inet,socket.sock stream 目的資訊 server ip 127.0.0.1 server port 60000 鏈結伺服器 tcp cl...

伺服器監聽客戶

伺服器端 private void button1 click object sender,eventargs e chatsocket.close acceptedsocket.close catch argumentnullexception es catch socketexception e...

客戶 伺服器模型

在我們日常所見的網路應用程式中,很多都是由客戶 伺服器 c s 模型組成的。伺服器主要承擔著提供資源的責任,通常可以為數量較多的客戶提供服務。今天我們主要來通過乙個最基本的回射伺服器和客戶端模型的編寫,來體會到客戶和伺服器的角色定位,以及對套接字有更深的理解。首先要有一些準備知識,了解在linux下...