TCP協議的問題

2021-09-08 19:09:45 字數 4517 閱讀 8724

server端接收到client端資訊後不會返回給client端

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

//#include "stdafx.h"

#include

#include

#include

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

#define grs_alloc(sz) heapalloc(getprocessheap(), 0 ,sz)

#define grs_calloc(sz) heapalloc(getprocessheap(), heap_zero_memory, sz)

#define grs_crealloc(p, sz) heaprealloc(getprocessheap(), heap_zero_memory, p, sz)

#define grs_safefree(p) if(null != p)

#define grs_useprintf() tchar pbuf[1024] = {}; char pbufa[1024] = {};

#define grs_printf(...)\

stringcchprintf(pbuf, 1024, __va_args__);\

writeconsole(getstdhandle(std_output_handle), pbuf, lstrlen(pbuf), null, null);

#define grs_printfa(...)\

stringcchprintfa(pbufa, 1024, __va_args__);\

writeconsolea(getstdhandle(std_output_handle), pbufa, lstrlena(pbufa), null, null);

#define sock_verh 2

#define sock_verl 2

#define grs_server_port 5634

int _tmain(int argc, _tchar* ar**)

if(lobyte(wd.wversion) != sock_verh || hibyte(wd.wversion) != sock_verl)

grs_printf(_t("winsock庫初始化成功!\n\t當前系統中支援最高的winsock版本為%d.%d\n\t當前應用程式使用的winsock版本為%d.%d\n"),

lobyte(wd.whighversion), hibyte(wd.whighversion),

lobyte(wd.wversion), hibyte(wd.wversion));

socket skserver = socket(af_inet, sock_stream, ipproto_tcp);

socket skclient = invalid_socket;

sockaddr_in saclient = {};

int isalen = sizeof(sockaddr_in);

void* pskbuf = null;

void* pskbuftmp = null;

int ibuflen = 1024;

int ibuflentmp = 0;

int irecv = 0;

sockaddr_in sa = ;

sa.sin_addr.s_addr = htonl(inaddr_any);

sa.sin_port = htons(grs_server_port);

if(0 != bind(skserver, (sockaddr*)&sa, sizeof(sockaddr_in)))

if(0 != listen(skserver, somaxconn))

while(invalid_socket != (skclient=accept(skserver, (sockaddr*)&saclient, &isalen)))

if(irecv >= (ibuflen - ibuflentmp))

}while (1);

if(socket_error != irecv && 0 != irecv)

else

grs_safefree(pskbuf);

pskbuftmp = null;

ibuflentmp = 0;

ibuflen = 1024;

shutdown(skclient, sd_both);

closesocket(skclient);

}clean_up:

_tsystem(_t("pasue"));

if(invalid_socket != skserver)

::wsacleanup();

return 0;

}               //server端的**

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

//#include "stdafx.h"

#include

#include

#include

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

#define grs_alloc(sz) heapalloc(getprocessheap(), 0 ,sz)

#define grs_calloc(sz) heapalloc(getprocessheap(), heap_zero_memory, sz)

#define grs_crealloc(p, sz) heaprealloc(getprocessheap(), heap_zero_memory, p, sz)

#define grs_safefree(p) if(null != p)

#define grs_useprintf() tchar pbuf[1024] = {}; char pbufa[1024] = {};

#define grs_printf(...)\

stringcchprintf(pbuf, 1024, __va_args__);\

writeconsole(getstdhandle(std_output_handle), pbuf, lstrlen(pbuf), null, null);

#define grs_printfa(...)\

stringcchprintfa(pbufa, 1024, __va_args__);\

writeconsolea(getstdhandle(std_output_handle), pbufa, lstrlena(pbufa), null, null);

#define sock_verh 2

#define sock_verl 2

#define grs_server_port 5634

int _tmain(int argc, _tchar* ar**)

if(lobyte(wd.wversion) != sock_verh || hibyte(wd.wversion) != sock_verl)

grs_printf(_t("winsock庫初始化成功!\n\t當前系統中支援最高的winsock版本為%d.%d\n\t當前應用程式使用的winsock版本為%d.%d\n"),

lobyte(wd.whighversion), hibyte(wd.whighversion),

lobyte(wd.wversion), hibyte(wd.wversion));

socket skclient = socket(af_inet, sock_stream, ipproto_ip);

sockaddr_in sa = ;

sa.sin_addr.s_addr = inet_addr("127.0.0.1");

sa.sin_port = htons(grs_server_port);

wchar pszsendmsg = _t("hello internetssssssssssssssssssssssssss!");

size_t szlen = 0;

stringcchlength(pszsendmsg, 30, &szlen);

wchar pszrecvbuf[1024] = {};

if(0 != connect(skclient, (sockaddr*)&sa, sizeof(sockaddr_in)))

send(skclient, (char*)pszsendmsg, szlen * sizeof(wchar), 0);

recv(skclient, (char*)pszrecvbuf, 1024 * sizeof(wchar), 0);

grs_printf(_t("echo:%s\n"), pszrecvbuf);

clean_up:

if(invalid_socket != skclient)

_tsystem(_t("pasue"));

::wsacleanup();

return 0;

}  //client端的**

server端接收到client端資訊後不會返回給client端,

TCP協議相關問題

當多個連線請求同時到達server,會怎麼樣?1.tcp存在乙個連線佇列,對於新的連線請求,該tcp監聽的埠的連線佇列中還有空間則tcp模組對syn進行確認並完成連線的建立,丟進連線佇列。應用層只在三次握手的第三個報文收到後才知道這個新連線。2.對於新的連線請求,連線佇列中如果沒有空間,tcp將不理...

TCP網路協議問題

題目描述 在如今的網路中,tcp 是一種被廣泛使用的網路協議,它在傳輸層提供了可靠的通訊服務。眾所周知,網路是存在時延的,例如使用者先後向伺服器傳送了兩個指令 op1 和 op2,並且希望伺服器先處理指令 op1,再處理指令 op2 但由於網路時延,這兩個指令可能會失序到達,而導致伺服器先執行了指令...

TCP IP協議 TCP協議

今天算是對了tcp協議有個膚淺的理解了 儘管tcp和udp都是一樣的網路層ip,但是tcp卻和udp實現著不一樣的服務,tcp是乙個面向連線的,可靠地位元組流服務!面向連線是指 兩個使用tcp的程式要建立乙個tcp連線才能交換資料。tcp以以下方式提供可靠性 1 應用程式被分為tcp認為合適傳送的資...