一早結束了網路程式設計的實驗,小菜一直沒空記錄一下
今天寫點吧
內容:
所謂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...