VC++ socket程式設計例項
1. 兩天計算機通訊需要協議,通訊的兩臺計算機IP必須唯一
2. 同一個計算機可以進行多個應用程式與其他計算機通訊,IP地址唯一,而埠號是區別同一計算機(同一IP)的唯一標示。
3. 實際上就類似於一個辦公室的總機號碼(IP)和分機號碼(埠號)
4. 協議:為了進行網路中的資料交換(通訊)而建立的規則、標準或約定
5. 協議=語義+語法+規則
6. 不同層具有各自不同的協議
7. 上層使用下層提供的服務,實際通訊在最底層完成
8. 對等層實體之間虛擬通訊|
9. TCP:面向連線的可靠的傳輸協議
10. UDP:面向無連線的不可靠的傳輸協議
11. 埠是一種抽象的軟體結構。應用程式通過系統呼叫與某埠建立連線後,傳輸層傳給埠的資料都被響應的進行所接收,相應程序發給傳輸層的資料都通過該埠輸出。
12. 埠用一個整數型標示符來表示。埠號跟協議相關,TCP/IP傳輸層的兩個協議TCP和UDP是完全獨立的兩個軟體模組,因此各自的埠號也相互獨立。
13. 埠使用一個16位的數字來表示,它的範圍是0~65535,1024以下的埠號保留給預定義的服務。例如:http使用的是80埠。
14. socket(套接字):windows sockets只支援一個通訊區域:網際域(AF_INET),這個域被使用網際協議簇通訊的程序使用。
15. C/S模式:客戶機向伺服器提出請求,伺服器接收到請求後,提供相應的服務。
16. 套接字的型別
a) 流式套接字:(SOCK_STREAM):面向連線可靠的資料傳輸服務,按順序接收
b) 資料包式套接字:(SOCK_DGRAM):無連線服務。接收順序混亂。
c) 原始套接字(SOCK_RAM)
17. 基於TCP(面向連線)的socket程式設計
a) 伺服器端程式:
i. 建立套接字socket
ii. 將套接字繫結到一個本地地址和埠上bind
iii. 將套接字設為監聽模式,準備接收客戶請求listen
iv. 等待客戶請求到了;當請求到來後,接收連線請求,返回一個新的對應於此次連線的套接字accept
v. 用返回的套接字和客戶端進行通訊rend/recv
vi. 返回,等待另一客戶請求
vii. 關閉套接字
b) 客戶端程式:
i. 建立套接字socket
ii. 向服務端發出連線請求connect
iii. 和伺服器端進行通訊rend/recv
iv. 關閉套接字
18. 基於UDP的socket程式設計
a) 伺服器端(接收端)程式:
i. 建立套接字socket
ii. 將套接字繫結到一個本地地址和埠上bind
iii. 等待接收資料recv/from
iv. 關閉套接字
b) 客戶端(傳送端)程式:
i. 建立套接字socket
ii. 向伺服器傳送資料sendto
iii. 關閉套接字
19.
int WSAStartup (
WORD wVersionRequested, //打算使用的最高winsock版本號
LPWSADATA lpWSAData //是個結構體,接收socket的詳細資訊
);
20.
alt+F8
:格式化程式碼
21.
面向
TCP
的連線,伺服器端
a)
套接字
SOCKET socket (
int af, //指定地址簇
int type, //socket型別
int protocol //協議
);
b)
繫結
int bind (
SOCKET s, //要繫結的套接字
const struct sockaddr FAR* name, //指定了該套接字的本地地址資訊
int namelen //該地址結構的長度
);
struct sockaddr {
u_short sa_family;
char sa_data[14];
};
c) 監聽
int listen (
SOCKET s,
int backlog
);
d) 接受連線
SOCKET accept (
SOCKET s,
struct sockaddr FAR* addr,
int FAR* addrlen
);
e)
傳送
int send (
SOCKET s, //建立連線的socket
const char FAR * buf, //傳送的資料
int len, //傳送資料的長度
int flags
);
f)
接收
int recv (
SOCKET s,
char FAR* buf,
int len,
int flags
);
g) 需要的檔案
#include <winsock2.h>
需要連線一個動態連結庫:ws2_32.lib
22. 伺服器端:
a) Socket
b) 連線:connect
int connect (
SOCKET s,
const struct sockaddr FAR* name,
int namelen
);
c) 接收:recv
d) 傳送:send
e) 關閉:closesocket
23. Tcp服務端程式:
- #include <WINSOCK2.H>
- #include <stdio.h>
- void main()
- {
- WORD wVersionRequested;
- WSADATA wsaData;
- int err;
- wVersionRequested = MAKEWORD( 1, 1 );
- err = WSAStartup( wVersionRequested, &wsaData );
- if ( err != 0 ) {
- return;
- }
- if ( LOBYTE( wsaData.wVersion ) != 1 ||
- HIBYTE( wsaData.wVersion ) != 1 ) {
- WSACleanup( );
- return;
- }
- SOCKET sockSrv=socket(AF_INET,SOCK_STREAM,0);
- SOCKADDR_IN addrSrv;
- addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);
- addrSrv.sin_family=AF_INET;
- addrSrv.sin_port=htons(6000);
- bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));
- listen(sockSrv,5);
- SOCKADDR_IN addrClient;
- int len=sizeof(SOCKADDR);
- while(1)
- {
- SOCKET sockConn=accept(sockSrv,(SOCKADDR*)&addrClient,&len);
- char sendBuf[100];
- sprintf(sendBuf,"Welcome %s to 劉窪村",inet_ntoa(addrClient.sin_addr));
- send(sockConn,sendBuf,strlen(sendBuf)+1,0);
- char recvBuf[100];
- recv(sockConn,recvBuf,100,0);
- printf("%s\n",recvBuf);
- closesocket(sockConn);
- }
- }
24. Tcp客戶端程式:
- #include <WINSOCK2.H>
- #include <stdio.h>
- void main()
- {
- WORD wVersionRequested;
- WSADATA wsaData;
- int err;
- wVersionRequested = MAKEWORD( 1, 1 );
- err = WSAStartup( wVersionRequested, &wsaData );
- if ( err != 0 ) {
- return;
- }
- if ( LOBYTE( wsaData.wVersion ) != 1 ||
- HIBYTE( wsaData.wVersion ) != 1 ) {
- WSACleanup( );
- return;
- }
- SOCKET sockClient=socket(AF_INET,SOCK_STREAM,0);
- SOCKADDR_IN addrSrv;
- addrSrv.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");//伺服器端的地址
- addrSrv.sin_family=AF_INET;
- addrSrv.sin_port=htons(6000);
- connect(sockClient,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));
- char recvBuf[100];
- recv(sockClient,recvBuf,100,0);
- printf("%s\n",recvBuf);
- send(sockClient,"This is 劉窪村",strlen("This is 劉窪村")+1,0);
- closesocket(sockClient);
- WSACleanup();
- }
25. 執行之後,開啟了6個客戶端,一個伺服器端。程式執行效果:
26. 面向UDP的連線
27. 伺服器:socket
a) bind
b) 接收資料:
int recvfrom (
SOCKET s, //套接字
char FAR* buf, //接收資料
int len, //長度
int flags, //會影響呼叫行為,0
struct sockaddr FAR* from, //接收發送方的地址資訊
int FAR* fromlen //接收長度
);
c) 關閉closesocket
d) Cleanup
28. UDP伺服器端程式:
- #include <WINSOCK2.H>
- #include <stdio.h>
- void main()
- {
- WORD wVersionRequested;
- WSADATA wsaData;
- int err;
- wVersionRequested = MAKEWORD( 1, 1 );
- err = WSAStartup( wVersionRequested, &wsaData );
- if ( err != 0 ) {
- return;
- }
- if ( LOBYTE( wsaData.wVersion ) != 1 ||
- HIBYTE( wsaData.wVersion ) != 1 ) {
- WSACleanup( );
- return;
- }
- SOCKET sockSrv=socket(AF_INET,SOCK_DGRAM,0);
- SOCKADDR_IN addrSrv;
- addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);
- addrSrv.sin_family=AF_INET;
- addrSrv.sin_port=htons(6000);
- bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));
- SOCKADDR_IN addrClient;
- int len=sizeof(SOCKADDR);
- char recvBuf[100];
- recvfrom(sockSrv,recvBuf,100,0,(SOCKADDR*)&addrClient,&len);
- printf("%s\n",recvBuf);
- closesocket(sockSrv);
- WSACleanup();
- }
28. UDP客戶端:
a) socket定義
b) 傳送:
int sendto (
SOCKET s,
const char FAR * buf,
int len,
int flags,
const struct sockaddr FAR * to,
int tolen
);
29. UDP客戶端程式
- #include <WINSOCK2.H>
- #include <stdio.h>
- void main()
- {
- WORD wVersionRequested;
- WSADATA wsaData;
- int err;
- wVersionRequested = MAKEWORD( 1, 1 );
- err = WSAStartup( wVersionRequested, &wsaData );
- if ( err != 0 ) {
- return;
- }
- if ( LOBYTE( wsaData.wVersion ) != 1 ||
- HIBYTE( wsaData.wVersion ) != 1 ) {
- WSACleanup( );
- return;
- }
- SOCKET sockClient=socket(AF_INET,SOCK_DGRAM,0);
- SOCKADDR_IN addrSrv;
- addrSrv.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");
- addrSrv.sin_family=AF_INET;
- addrSrv.sin_port=htons(6000);
-
sendto(sockClient,
相關推薦
VC++ socket程式設計例項
1. 兩天計算機通訊需要協議,通訊的兩臺計算機IP必須唯一 2. 同一個計算機可以進行多個應用程式與其他計算機通訊,IP地址唯一,而埠號是區別同一計算機(同一IP)的唯一標示。 3. 實際上就類似於一個辦公室的總機號碼(IP)
Golang Socket 程式設計例項
服務端程式: package main import ( "net" "fmt" "strings" ) func handle(conn net.Conn) { defer conn.Close() buf := make([]byte, 2048) for { n,
Linux Socket程式設計例項(一個Hello World程式)
在Linux下寫了個小的socket程式,分為客戶端和伺服器端,服務端開一個埠(2000),做為一個daemon,等待客戶的連線請求.一旦有客戶連線,伺服器端打印出客戶端的IP地址和埠,並且向伺服器端傳送歡迎資訊和時間.下面是服務端的程式碼(tcpserver.c).由於這只是個簡單的程式,所
Android學習筆記三十六:android之socket程式設計例項
注意點:註冊訪問的網路許可權;android中UI執行緒不能有訪問網路的操作,否則會報android.os.NetworkOnMainThreadException的異常 <uses-permission android:name="
VC++ socket通訊例項 總結
1. 兩天計算機通訊需要協議,通訊的兩臺計算機IP必須唯一 2. 同一個計算機可以進行多個應用程式與其他計算機通訊,IP地址唯一,而埠號是區別同一計算機(同一IP)的唯一標示。 3. 實際上就類似於一個辦公室的總機號碼(IP)和分機
android socket程式設計例項
轉自:http://blog.csdn.net/wuchuanpingstone/article/details/6617276 Android客戶端通過socket與伺服器進行通訊可以分為以下幾步: 應用程式與伺服器通訊可以採用兩種模式:TCP可
UDP windows下socket程式設計例項
Server 端程式原始碼: #include <stdio.h> #include <Winsock2.h> void main() { SOCKET socket1; //InitWinsock(); WSADATA wsaData; int iErrorCode;
UDP之socket程式設計例項
不講解了,要求讀者: 1. 知道UDP是什麼 2. 索求Windows環境下的socket程式設計函式 3. 已經配置好了編譯環境——在Tools-option-中的設定 客戶端程式碼 #include <stdio.h> #inclu
android socket程式設計例項
android客戶端通過socket與伺服器進行通訊可以分為以下幾步: 應用程式與伺服器通訊可以採用兩種模式:TCP可靠通訊 和UDP不可靠通訊。 (1)通過IP地址和埠例項化Socket,請求連線伺服器: socket = new Socket(HOST, PO
vc socket tcp程式設計的簡單例項
//Server端 #include <Winsock2.h> #include <stdio.h> void main() { WORD wVersionRequested; WSADATA wsaData; int er
java socket網路程式設計例項程式碼(含服務端和客戶端)
本程式碼為java socket網路程式設計例項程式碼,包括客戶端和服務端,實現客戶端傳送訊息,服務端接收並反饋訊息。 server.java為服務端程式碼。 client.java為客戶端程式碼。 服務端程式碼server.java: package socket;
Python網路程式設計socket模組例項解析
socket通常也稱作”套接字”,用於描述IP地址和埠,是一個通訊鏈的控制代碼,應用程式通常通過”套接字”向網路發出請求或者應答網路請求。 socket起源於Unix,而Unix/Linux基本哲學之一就是“一切皆檔案”,對於檔案用【開啟】【讀寫】【關閉】模式來操作。socket就是該模式的一個實現,soc
vc 網路程式設計(socket)TCP/UDP 介紹
在網上找了很多的資料,現將這些資料整合起來,詳細介紹一下VC下的socket程式設計,並提供一個伺服器客戶端具體的例項。希望對您有所幫助 一、原理部分 在網路程式設計中最常用的方案便是Client/Server (客戶機/伺服器)模型。在這種方案中客戶應用程式向伺服器
Socket程式設計之TCP例項(附C/C++程式碼詳解)
說明: 主要分步驟給出Windows平臺下socket程式設計的一個TCP例項;使用WINDOWS下網路程式設計規範Winsock完成網路通訊; 對程式各部分細節進行描述。 套接字有三種傳輸型別SOCK_STREAM SOCK_DGRAM SOCK_RAW;
java網路程式設計:12、基於UDP的socket程式設計(二)程式碼通訊-簡單例項
宣告:本教程不收取任何費用,歡迎轉載,尊重作者勞動成果,不得用於商業用途,侵權必究!!! 文章目錄 一、基於UDP伺服器端程式的編寫 二、基於UDP客戶端程式的編寫 三、系列文章(java網路程式設計) 通過上篇文章瞭解了基於UDP通訊的理論、基本步驟以及它跟TCP的區別
Android的Socket通訊程式設計例項
Android手機的應用,除了它的手機功能之外,另外一個吸引人的地方在於它的開放性,這一點iphone無法比擬,至少iphone太多商業化氣息。android為我們開啟另一扇交流之窗,而要實現交流,socket通訊必不可少。 java在socket通訊方面上已經有了很
Java Socket 簡單程式設計例項
之前照著書寫了一個例項,最後一次java實驗也就結束了,後來還有一個是寫計算機網路課程設計好像寫到了套接字Socket 現在又把重新拿出來,感覺是有不少東西要學習的。 所謂socket通常也稱作"套接字"。應用程式通常通過"套接字"向網路發出請求或者應答網路請求。 事實上網
python socket程式設計入門(編寫server例項)
python 編寫server的步驟: 1. 第一步是建立socket物件。呼叫socket建構函式。如: socket = socket.socket( family, type ) family引數代表地址家族,可為AF_INET或AF_UNIX
VC環境下UDP Socket程式設計示例
VC下的Socket程式設計要包含winsock2.h標頭檔案,並在專案設定中加入連結庫ws2_32.lib.下面是一個用UDP實現的echo程式示例。 伺服器端程式碼: #include <stdio.h> #include <Winsock2.h> void main() {
Socket程式設計java[簡單易懂],附帶Android Studio 專案聊天例項
伺服器端 package socket_util; import java.io.BufferedReader; import java.io.IOException; import java.