VC TCP網路控制台程式

2021-09-09 03:38:30 字數 4490 閱讀 2352

在windows7系統下,採用工具為vs2008,win32控制台應用程式,編寫乙個基於tcp的client/server網路程式。

1、伺服器端**

#include #include 

//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;

}

2、客戶端**

#include #include 

#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;

}

另外,需要注意的是需要在伺服器和客戶端都需要鏈結winsock靜態鏈結庫ws2_32.lib,有兩種新增方法方法一:在工程配置屬性中新增假如建立乙個名為tcpclient的win32控制台應用程式(1)切換到tcpserver的【solution explorer】,選擇選單【project】->【tcpclient properties】

(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...