基於UDP的ECHO控制台程式

2021-06-16 10:17:14 字數 3414 閱讀 6751

一早結束了網路程式設計的實驗,小菜一直沒空記錄一下

今天寫點吧

內容:

所謂echo,就是伺服器把它所收到的資料原封不動地回送給客戶端。

流程:

1.客戶端向伺服器傳送字串「hello world!」;

2.伺服器收到後,顯示客戶端的位址和埠,並把收到的資料回送給客戶端;

3.客戶端收到回送的資料後顯示出來。

要求:

完成udp的客戶、伺服器程式;

伺服器的固定埠號為20000。

觀察並思考:

按如下要求修改**,觀察並回答如下的問題(套介面函式出錯時,輸出錯誤**):

1.       套介面描述符的值是多少?

2.       伺服器端如果沒有呼叫bind()函式,會出現什麼錯誤?

3.       客戶端的sendto()函式中,如果沒有指定正確的遠地位址資訊結構體的大小會怎樣?

4.       伺服器端的recvfrom()函式中,最後乙個引數沒有賦初值會怎樣?

5.       如果伺服器的接收緩衝區沒有使用memset()清空直接接收資料,並以字串的格式輸出收到的資料,螢幕會顯示什麼?

6.       客戶端向伺服器傳送長度為0的資料,觀察伺服器的反應。

7.       客戶端向伺服器傳送整數和結構體。結構體如下定義:

struct stu_t

char _name[20];

int _score;

8.       如果結構體如下定義,怎麼把它的內容傳送給伺服器?

struct stu_t

char *_name;

int _score;

9.       其它您有疑問的地方?

建立乙個win32的控制台程式

原理圖如下:

效果圖**分別用兩個vc開啟先執行伺服器端   再開啟客服端

具體**:

小菜寫的東西  裡邊  很多都是老師影印的教材的結晶   

勿噴

//客戶端:

#include#include#include#define max_buf 65536

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

int main()

socket sock;

sock=socket(af_inet,sock_dgram,0);

printf("%d\n",sock);

if(invalid_socket==sock)

char rbuf[max_buf];

char data="hello world!";

char dest_ip="127.0.0.1"; //目的ip

unsigned short dest_port=20000;//目的埠

sockaddr_in remoteaddr;

remoteaddr.sin_family = af_inet;

remoteaddr.sin_port = htons(dest_port);

remoteaddr.sin_addr.s_addr=inet_addr(dest_ip);

int sbyte = sendto(sock,data,strlen(data),0,(sockaddr*)&remoteaddr,sizeof(remoteaddr));

if(socket_error==sbyte)

int remotelen = sizeof(remoteaddr);

printf("%d\n",remotelen);

int rbyte=recvfrom(sock,rbuf,max_buf,0,(sockaddr*)&remoteaddr,&remotelen);

if(socket_error==rbyte)

printf("udp send[%d]data to %s-%d:%s\n",sbyte,dest_ip,dest_port,data);

closesocket(sock);

wsacleanup();

return 0;

}

伺服器端**:

伺服器:

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

#define max_buf 65536

int main()

socket sock;

sock=socket(af_inet,sock_dgram,0);

if(invalid_socket==sock)

sockaddr_in localaddr;

localaddr.sin_family=af_inet;

localaddr.sin_port=htons(20000);

localaddr.sin_addr.s_addr=htonl(inaddr_any);

err=bind(sock,(sockaddr*)&localaddr,sizeof(localaddr));

if(socket_error==err)

char data="hello world!";

char rbuf[max_buf];

memset(rbuf,0,max_buf);

sockaddr_in remoteaddr;

int remotelen = sizeof(remoteaddr);

int rbyte=recvfrom(sock,rbuf,max_buf,0,(sockaddr*)&remoteaddr,&remotelen);

if(socket_error==rbyte)

int sbyte = sendto(sock,data,strlen(data),0,(sockaddr*)&remoteaddr,sizeof(remoteaddr));

if(socket_error==sbyte)

printf("udp recv[%d]data from %s:%s\n",rbyte,inet_ntoa(remoteaddr.sin_addr),rbuf);

closesocket(sock);

wsacleanup();

return 0;

}

控制台程式裡呼叫控制台程式

現在遇到這麼個問題,我想用控制台裡呼叫控制台程式來實現多文字。但是在控制台裡呼叫控制台程式時,它不是出現新的控制台視窗顯示,而是已有的控制台裡顯示呼叫的程式,system d code 練習 jjplace editor debug editor.exe winexec d code 練習 jjpl...

沒有控制台視窗的控制台程式

include include pragma comment linker,subsystem windows entry maincrtstartup int main int argc,char argv 編譯後執行程式會彈出乙個訊息框,而沒有背後的控制台視窗。再看看下面的 include in...

基於控制台的I O

c 輸入cout與輸出cin 輸入和輸出並不是c 語言中的正式組成成分 c和c 本身都沒有為輸入和輸出提供專門的語句結構 輸入輸出不是由c 本身定義的,而是在編譯系統提供的i o庫中定義的 在編寫c 程式時,如果需要使用輸入輸出時,則需要包含標頭檔案 在 中定義了用於輸入輸出的物件。例如 常見的 c...