在windows7系統下,採用工具為vs2008,win32控制台應用程式,編寫乙個基於tcp的client/server網路程式。
1、伺服器端**
#include #include2、客戶端**//vs2012建立的mfc win32控制台應用程式中,此處預設包含的是#include "stdafx.h",其中stdio.h標頭檔案已經被包含進stdafx.h中了,不再需要重複包含
#define serverport 6000 //
服務埠號
#pragma comment(lib,"ws2_32.lib")
int main(int argc, char *ar**)
else
if (lobyte(wsadata.wversion) != 2 ||hibyte(wsadata.wversion) != 2
)
//建立用於監聽的套接字
socket sockserver = socket(af_inet, sock_stream, 0
);
if(sockserver ==invalid_socket)
else
//填充伺服器端套接字結構
sockaddr_in addrserver;
addrserver.sin_addr.s_un.s_addr = htonl(inaddr_any);//
將主機位元組順序轉換成tcp/ip網路位元組順序
addrserver.sin_family =af_inet;
addrserver.sin_port =htons(serverport);
//將套接字繫結到乙個本地位址和埠上
err = bind(sockserver, (sockaddr*)&addrserver, sizeof
(sockaddr));
if (err ==socket_error)
else
//將套接字設定為監聽模式,準備接收客戶請求
err = listen(sockserver, 5
);
if (err ==socket_error)
else
sockaddr_in addrclient;
//儲存傳送請求連線的客戶端的套接字資訊
int len = sizeof
(sockaddr);
while(1
)
else
char sendbuf[100
];
sprintf_s(sendbuf,
100, "
welcome %s
",inet_ntoa(addrclient.sin_addr));
//傳送資料
send(sockconn, sendbuf, strlen(sendbuf)+1 , 0
);
char recvbuf[100
];
//接收資料
recv(sockconn, recvbuf, 100, 0
);
//列印接收到的資料
printf("
receive data from client side [%s,%d] is: %s\n
", inet_ntoa(addrclient.sin_addr), addrclient.sin_port,
recvbuf);
closesocket(sockconn);
//關閉連線套接字
}
return
0;
}
#include #include另外,需要注意的是需要在伺服器和客戶端都需要鏈結winsock靜態鏈結庫ws2_32.lib,有兩種新增方法方法一:在工程配置屬性中新增假如建立乙個名為tcpclient的win32控制台應用程式(1)切換到tcpserver的【solution explorer】,選擇選單【project】->【tcpclient properties】#define serverport 6000 //
服務埠號
#pragma comment(lib, "ws2_32.lib")
int main(int argc, char *ar**)
else
if ( lobyte( wsadata.wversion ) != 2 ||hibyte( wsadata.wversion ) != 2
)
/*the winsock dll is acceptable. proceed.
*///
建立套接字
socket sockclient = socket(af_inet, sock_stream, 0
);
if(sockclient ==invalid_socket)
else
//需要連線的服務端套接字結構資訊
sockaddr_in addrserver;
addrserver.sin_addr.s_un.s_addr = inet_addr("
127.0.0.1
");//
設定伺服器的ip位址
addrserver.sin_family =af_inet;
addrserver.sin_port = htons(serverport);//
設定伺服器的埠號(使用網路位元組序)
//向伺服器發出連線請求
err = connect(sockclient, (sockaddr*)&addrserver, sizeof
(sockaddr));
if (err ==socket_error)
else
//接收資料
char recvbuf[100]=;
recv(sockclient, recvbuf,
100, 0
);
printf(
"receive data from server side is: %s\n
", recvbuf);
//傳送資料
send(sockclient, "
this is a client side!\n
", strlen("
this is a client side!\n
")+1, 0
);
//關閉套接字
closesocket(sockclient);
//終止套接字型檔的使用
wsacleanup();
return
0;
}
(2)在tcpclient properties pages對話方塊中,依次選擇【configuration properties】->【linker】->【input】,在右側的【addtional dependencies】中新增ws2_32.lib庫。
如下如所示:
伺服器tcpserver也需要鏈結ws2_32.lib庫,方法和客戶端tcpclient一樣。
程式結果執行如下:
先啟動伺服器端程式tcpserver,結果如下:
再啟動客戶端tcpclient,客戶端結果如下:
伺服器端tcpserver結果如下:
方法二:在**中新增
#pragma comment(lib, "ws2_32.lib");
VC UDP網路控制台程式
採用的是vc2008,控制台應用程式,使用udp編寫。1 服務端 include include define serverport 6000 服務埠號 pragma comment lib,ws2 32.lib int main int argc,char ar confirm that the ...
控制台程式裡呼叫控制台程式
現在遇到這麼個問題,我想用控制台裡呼叫控制台程式來實現多文字。但是在控制台裡呼叫控制台程式時,它不是出現新的控制台視窗顯示,而是已有的控制台裡顯示呼叫的程式,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...