基於TCP/IP協議的C++網路程式設計(API函式版)
原始碼:http://download.csdn.net/detail/nuptboyzhb/4169959
基於TCP/IP協議的網路程式設計
定義變數——獲得WINSOCK版本——載入WINSOCK庫——初始化——建立套接字 ——設定套接字選項——關閉套接字——解除安裝WINSOCK庫——釋放所有資源
整個程式架構分為兩大部分,伺服器端客戶端。
伺服器SOCKET程式流程:
socket()→bind()→listen→accept()→recv()/send()→closesocket()
客戶端:
socket→bind()→connect()→send()/recv()→closesocket()
程式設計舉例:
約定傳送訊息的格式為如下結構體:
typedef struct
{
int ID;
char data[255];
}TcpMessage;
應用程式的標頭檔案如下:
#include <winsock2.h>
#pragma comment(lib,"ws2_32")
#include <stdio.h>
埠號為:4500
伺服器端:
1、 初始化:
WSADATA wsaData;
WORD sockVersion = MAKEWORD(2, 2);
if(WSAStartup(sockVersion, &wsaData) != 0)
return 0;
2、 建立套接字:
SOCKET sListen = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if(sListen == INVALID_SOCKET)
{
printf("socket error\n");
return 0;
}
3、 使套接字和本地地址繫結
// 在sockaddr_in結構中裝入地址資訊
sockaddr_in sin;
sin.sin_family = AF_INET;
sin.sin_port = htons(4500); // htons
//位元組順序
sin.sin_addr.S_un.S_addr = INADDR_ANY;
if(bind(sListen, (LPSOCKADDR)&sin, sizeof(sin)) == SOCKET_ERROR)
{
printf(" bind error \n");
closesocket(sListen);
return 0;
}
4、監聽埠
if(listen(sListen, 5) == SOCKET_ERROR)
{
printf("listen error\n");
closesocket(sListen);
return 0;
}
5、等待接受連線,(如無連線,一直等待)
SOCKET sClient;//用於儲存accept返回的套接字
sClient = accept(sListen,0,0);//accept函式呼叫失敗則繼續等待連線。
if(sClient == INVALID_SOCKET)
{
printf("accept() error");
}
6、用第5步中accept函式返回的套接字進行收發通訊
6.1、接收:(如果沒有接到,會等待!)
TcpMessagerevData;//定義接收訊息的結構體變數
int ret=recv(sClient,(char *)&revData,sizeof(revData),0);
if(ret>0)//說明,收到位元組
{
switch (revData.ID)//對不同的ID,可以有不同的反應
{
case 1:
……..
case 2:
……..
}
}
6.2、傳送:
TcpMessage sendData;
memset((char*)&sendData,0,sizeof(sendData));//初始化為0
sendData.ID=1;//為ID成員變數賦值
strcpy(sendData.data,"\r\n..要傳送的字元資訊 ");
if(send(sClient,(char*)&sendData,sizeof(sendData),0)==SOCKET_ERROR)
{
char error[10];
int errorcode=WSAGetLastError();
itoa(errorcode,error,10);
MessageBox(NULL,error,"傳送失敗,錯誤碼為:",MB_OK);
printf("send error!");
}
7、關閉
closesocket(sClient);//由accept生成的套接字
closesocket(sListen);//服務端套接字
WSACleanup();
客戶端
1、 初始化
WSADATA wsaData;
WORD sockVersion = MAKEWORD(2, 2);
if(WSAStartup(sockVersion, &wsaData) != 0)
return 0;
2、 建立套接字
SOCKET sClient = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if(sClient == INVALID_SOCKET)
{
printf("socket error\n");
return 0;
}
3、 使套接字和本地地址繫結
// 在sockaddr_in結構中裝入伺服器端地址資訊
sockaddr_in servAddr;
servAddr.sin_family = AF_INET;
servAddr.sin_port = htons(4500);// htons函式將主機的無符號短整形數轉換成網路
//位元組順序,4500埠為要連線伺服器端的埠
servAddr.sin_addr.S_un.S_addr =inet_addr("127.0.0.1");//伺服器端ip
4、 連線伺服器
if(connect(sClient,(sockaddr*)&servAddr,sizeof(servAddr))==SOCKET_ERROR)
{
printf("connect error\n");
closesocket(sClient);
return 0;
}
//注意,要先把伺服器開啟,否則連線失敗
5、 收發通訊
用send和recv函式,這一點和伺服器端一樣
6、 關閉
closesocket(sClient);//客戶端只有一個連線套接字
WSACleanup();
相關推薦
基於TCP/IP協議的C++網路程式設計(API函式版)
原始碼:http://download.csdn.net/detail/nuptboyzhb/4169959 基於TCP/IP協議的網路程式設計 定義變數——獲得WINSOCK版本——載入WINSOC
基於tcp/ip協議的網路程式設計的一點感悟 ---關於ip和port作為通訊一端的唯一標識的認識
對於基於tcp的應用程式來說,無論是客戶端,還是伺服器端,唯一標識對端id的是socket pair {本地ip:本地port, 遠端ip:遠端port} ,底層的ip協議資料包肯定包含源ip和port,目的ip和port, 當此資料包到達目的地時,目標主機的tc
基於TCP/IP協議的Socket程式設計
如今的大多數網路通訊都是選擇使用基於TCP/IP的協議進行,其中封裝的比較好的當屬socket了,下面就socket的使用進行詳細的描述: 一、Socket的工作模式 在TCP/IP網路應用中,通訊的兩個程序間相互作用的主要模式是客戶/伺服器(C/S)模式,即客戶向伺服器發
浙大版《C語言程式設計(第3版)》題目集 - 習題11-5 指定位置輸出字串(20 分)
題目連結:點選開啟連結 題目大意:略。 解題思路:略。 AC 程式碼 char *match( char *s, char ch1, char ch2 ) { char *p=s, *h; int fst=1,
浙大版《C語言程式設計(第3版)》題目集 - 習題11-7 奇數值結點連結串列(20 分)
題目連結:點選開啟連結 題目大意:略。 解題思路:題目說刪除了,其實可以轉化為再搞一個獲取奇數時的做法來做偶數的情況,最後把地址賦值給L,這樣思路就簡單許多~。還有這裡帶兩個星號的L,其實多了一個星號是因為傳參時,傳進去的是指標變數的地址(此地址非內容
浙大版《C語言程式設計(第3版)》題目集(函式題)練習5-1
練習5-1 求m到n之和(10 分) 本題要求實現一個計算m~n(m 函式介面定義: int sum( int m, int n ); 其中m和n是使用者傳入的引數,保證有m < n。
浙大版《C語言程式設計(第3版)》題目集(函式題)練習5-3
練習5-3 數字金字塔(15 分) 本題要求實現函式輸出n行數字金字塔。 函式介面定義: void pyramid( int n ); 其中n是使用者傳入的引數,為[1, 9]的正整數。
浙大版《C語言程式設計(第3版)》題目集前四章總結-續
練習4-11 統計素數並求和 (20分) 本題要求統計給定整數MM和NN區間內素數的個數並對它們求和。 輸入格式: 輸入在一行中給出兩個正整數MM和NN(1\le M\le N\le 5001≤M≤N≤500)。 輸出格式: 在一行中順序輸出MM和NN區間內
浙大版《C語言程式設計(第3版)》
2.1.1.2 計算機和程式語言:計算機的思維方式 程式的執行 解釋:藉助一個程式,那個程式能試圖理解你的程式,然後按照你的要求執行。 編譯:藉助一個程式,就像一個翻譯,把你的程式翻譯成計算機真正能懂的語言——機器語言——寫的程式,然後,這個機器語言寫的程
試讀《C#高階程式設計(第9版)》有感
在寫這篇書評之前,我想先說一下自己。我是一名對日外包程式設計師,自己從事外包工作也已經有八個年頭了。開始接觸軟體開發,我是從學習Java語言入手的,自己從事了外包這一行,才發現自己單純的會一種程式語言是遠遠不夠。當你被公司重視的時候,成為了一名軟體專案的消防
浙大版《C語言程式設計(第3版)》題目集(函式題)習題5-1
習題5-1 符號函式(10 分) 本題要求實現符號函式sign(x)。 函式介面定義: int sign( int x ); 其中x是使用者傳入的整型引數。符號函式的定義為:若x大於0,
譚浩強C語言程式設計(第三版)部分課後題答案,自己整理的
第一篇部落格,也不知道怎麼寫,就把以前的筆記發上來吧 學了半年後寫的,可能稍顯不規範,或有的多餘,將就看吧,也不想再改了 1.5 #include<stdio.h> void main() {printf("******************\n");pr
c++ 網路程式設計(九)TCP/IP LINUX/windows下 多執行緒超詳細教程 以及 多執行緒實現服務端
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> #include <process.h> #include <winsock2.h> #include <win
c++ 網路程式設計(九)TCP/IP LINUX/windows下 多執行緒超詳細教程 以及 多執行緒實現服務端
原文作者:aircraft 原文連結:https://www.cnblogs.com/DOMLX/p/9661012.html 先講Linux下(windows下在後面可以直接跳到後面看): 一.執行緒基本概念 前面我們講過多程序伺服器,但我們知道它開銷很大
簡單的 C++ SOCKET程式設計 ---基於TCP/IP協議(轉)
server端: #include <WINSOCK2.H> #include <stdio.h> #pragma comment(lib,"ws2_32.lib") void main() { //建立套接字 WORD myVersion
如何基於TCP/IP協議進行MFC Socket網路通訊程式設計
MFC Socket網路通訊程式設計 最近因為一個專案需要進行區域網絡通訊,向工作單位的軟體工程師請教了一下需要用到哪些知識,然後博主就自學了一遍windows網路通訊程式設計原理,然後就在網上找了一大堆例子,但實際執行效果並不佳,花了大概一週多的時間總算是把
網路程式設計 三 基於TCP/IP協議簡單伺服器構建
2018.0630********************************************************************** author:wills 網路程式設計入門 計算機網路基礎 計算機網路是獨立自主的
JAVA——點對面通訊(Socket基於TCP/IP協議)
點對面通訊(Socket基於TCP/IP協議) 1.要求 大多情況下,網路通訊經常需要多個客戶機同一個伺服器進行通訊,如FTP伺服器是同時接收多個客戶訪問的伺服器。本例介紹點對面通訊,即一個伺服器監聽多個客戶端的請求的通訊。 2.原理 建立多客戶連線的Soc
一、基於linux下TCP\IP協議套接字(socket)初識
在網際網路的世界中,不同的電腦之間需要進行資料交流,那麼他們就需要一個統一的規範,來確定怎麼樣進行交流。根據國際標準化組織ISO定義的標準,網路結構按照不同的功能分為7層,分別是物理層、資料鏈路層、網路層、傳輸層、會話層、表示層和應用層。在TCP/IP協體系中,
基於TCP/IP 協議的簡單C/S程式
http://blog.chinaunix.net/uid-23069658-id-3273673.html http://www.oschina.net/code/snippet_153782_16562