windows套接字編程
Ⅰ 在windows下用C語言如何實現socket網路編程,需要用到哪些頭文件或者庫
需要用到的頭文件包含:
#include <winsock2.h>
#include <windows.h>
與Linux環境下socket編程相比,windows環境多了一個步驟:啟動或者初始化winsock庫
Winsock,一種標准API,一種網路編程介面,用於兩個或多個應用程序(或進程)之間通過網路進行數據通信。具有兩個版本:
Winsock 1:
Windows CE平台支持。
頭文件:WinSock.h
庫:wsock32.lib
Winsock 2:
部分平台如Windows CE貌似不支持。通過前綴WSA可以區別於Winsock 1版本。個別函數如WSAStartup、WSACleanup、WSARecvEx、WSAGetLastError都屬於Winsock 1.1規范的函數;
頭文件:WinSock2.h
庫:ws2_32.lib
mswsock.h用於編程擴展,使用時必須鏈接mswsock.dll
(1)windows套接字編程擴展閱讀
winsock庫的載入與卸載:
載入:int WSAStartup(WORD wVersionRequested, LPWSADATA lpWSAData);
載入成功,返回值為0。
WORD wVersionRequested:載入的winsock版本,使用宏MAKEWORD(x, y),x表示高位元組,y表示低位元組。然而使用時MAKEWORD(2, 2)。高位元組與低位元組相同~~
LPWSADATA lpWSAData:WSADATA結構的指針,傳入參數後,系統幫助我們填充版本信息。有興趣的可以看看結構體內容,不過基本用不著。
卸載:int WSACleanup(void);比起載入,卸載的函數真是輕松愉快。
Ⅱ 編程有哪幾種~
網路編程 通過使用套接字來達到進程間通信目的編程就是網路編程。
代碼,開發工具,資料庫,伺服器架設和網頁設計這5部分你都要接觸
代碼分靜態代碼和動態代碼
靜態代碼是伺服器不解析直接發送給客戶端的部分,用做布局效果,一般不用於資料庫操作
靜態代碼分html,javascript,css等,其中html語言是基礎,要學網路編程就先學html語言.javascript用於實現某些特效,css是樣式語言.這3個語言組合起來,可以設計出美妙的網頁效果
動態代碼是伺服器需要解析的部分,用作資料庫連接操作等.有php,jsp,asp和asp.net.這幾種語言你只用先學一種就可.如果是想快速入門,建議先學asp,如果想學了找工作等,建議學php或jsp,
開發工具有很多種,我推薦一種,網路3劍客,其中dw是開發代碼的,fw是做圖的.flash是做動畫的.
資料庫要結合你學的動態語言來選擇,asp和asp.net系列的,你可以使用access,大型點使用mssql.
php和mysql是很好的搭檔.
伺服器架設也是結合你學的動態語言的,windows下安裝iis很方便,iis可以運行asp,安裝.net框架後能運行asp.net.這兩者架設相對簡單,也是我推薦你入門學asp的原因.php一般安裝apache伺服器,jsp一般安裝tomat伺服器.只有架設好伺服器,才能瀏覽動態語言編寫的程序.
雖然是編程,但是總會涉及到網頁設計部分,還是要去學學怎麼簡單的作圖和動畫。
而Windows編程主要是 c/c++,basic,pascald等
Ⅲ 請比較Linux與Windows在網路編程方面的特點
找了一段,大致涉及到了您的問題:
一、socket的模式
socket一般有兩種模式:同步和非同步(windows網路編程技術中也可叫鎖定和非鎖定,Linux網路編程叫阻塞和非阻塞)。
二、socket的類型
socket一般有三種類型,基於TCP的流式套接字,基於UDP的數據報套接字和原始套接字。
三、socket的IO模型
socket
的IO模型是編程中使用socket兩種模式的策略,它們適用的場合不同,在不同的操作系統上支持的模型也不同,例如windows從NT版本才開始支持
完成埠模型。Linux和Windows所支持的模型也有區別,當然也有相同的地方,可能叫法不一樣,但大致思路是一樣的,下面分別介紹windows
和Linux的IO模型
1、 Windows下的套接字IO模型:
A、 Select(選擇)模型
用於同步socket的狀態檢測模型,又叫(Linux)多路復用,可以同時檢測多個socket的狀態
B、 WSAAsyncSelect(非同步選擇)模型
用於非同步socket的非同步事件設置,它是基於Windows消息的模型,必須先打開一個窗口,然後把窗口和socket的消息綁定,這樣,在socket有消息通知時,操作系統便通知窗口,然後在窗口進行處理。
C、 WSAEventSelect(非同步事件)模型
用
於非同步socket的非同步事件,它是基於網路事件的模型,先使用CreateEvent創建一個事件,然後使用WSAEventSelect進行事件綁
定,然後可以使用WaitForMultipleObject(Event)進行事件監聽,可以同時監聽多個事件,不光是socket的,比如可以監聽使
用CreateWaitableTimer創建的Timer等。
D、 重疊IO模型
用
於非同步socket,在創建socket時需要在創建函數WSASocket中使用WSA_FLAG_OVERLAPPED標志,然後在投遞IO請求的時
候將一個Overlapped結構體指針賦給投遞函數,可以使用WSAWaitForMultipleObject來監聽事件,然後使用
WSAGetOverlappedResult來獲取IO的狀態,也可以在Overlapped結構體中使用完成常式來處理,即在投遞函數中把完成常式賦
給投遞函數。
E、 完成埠模型
它
是迄今為止最復雜的一種IO模型,當應用程序需要管理眾多的套接字並且希望隨著系統內安裝的CPU數目的增多,應用程序的性能也可以線性增加,就可以使用
這種模型,它的原理是每個CPU可以單獨負責一個線程的執行,避免線程的頻繁切換。使用這種模型往往可以達到最佳的系統性能。
首
先需要使用CreateIOCompletePort來創建完成埠,然後將IO句柄和此埠綁定,綁定也是使用此函數,當然也可以一次完成。接著是創建
工作者線程,工作者線程會使用GetQueuedCompletionStatus進入完成埠維護的線程池,當有完成事件時,會激活一個線程。
2、 Linux下的IO模型
A、阻塞IO
B、非阻塞IO
C、IO多路復用(選擇)
D、信號驅動
用於非同步socket,首先設定信號處理函數,然後使用fcntl函數設定socket的擁有者,像windows下使用WSAAsncSelect設定socket的窗口一樣。使用這種模型,當內核操作可以被操作的時候通知我們的應用程序
E、非同步IO
當內核在所有操作完成後才會通知應用程序
四、socket的一些使用上的優化
A、緩沖區的優化,可以考慮讓應用程序使用比較小的緩沖區,但同時使用多個WSARecv
B、使用socket選項SO_SNDBUF和SO_RCVBUF設置socket緩沖區大小,如果設為0,操作體系統會使用應用程序的緩沖區,這樣避免了從系統緩沖區向用戶區復制的開銷
五、注意這些IO模型有些不光是針對socket的,其他的IO操作也可以使用,最常用使用的是WriteFile,ReadFile等函數。
其它查考網址:
http://blog.163.com/tianle_han/blog/static/6617826200821522743948/
http://blog.csdn.net/yibulianhua/article/details/5374317
Ⅳ 套接字是什麼
套接字(socket)是一個抽象層,應用程序可以通過它發送或接收數據,可對其進行像對文件一樣的打開、讀寫和關閉等操作。套接字允許應用程序將I/O插入到網路中,並與網路中的其他應用程序進行通信。網路套接字是IP地址與埠的組合。
總之,套接字Socket=(IP地址:埠號),套接字的表示方法是點分十進制的IP地址後面寫上埠號,中間用冒號或逗號隔開。每一個傳輸層連接唯一地被通信兩端的兩個端點(即兩個套接字)所確定。
(4)windows套接字編程擴展閱讀
Socket最初是加利福尼亞大學Berkeley分校為Unix系統開發的網路通信介面。後來隨著TCP/IP網路的發展,Socket成為最為通用的應用程序介面,也是在Internet上進行應用開發最為通用的API。
Windows系統流行起來之後,由Microsoft聯合了其他幾家公司在Berkeley Sockets的基礎之上進行了擴充,共同制定了一套Windows下的網路編程介面,即Windows Sockets規范。
Windows Sockets規范是一套開放的、支持多種協議的Windows下的網路編程介面,包括1.1版和2.0版兩個版本。
參考資料來源:網路-套接字
Ⅳ 請教套接字是什麼概念,怎樣用
套接字(socket)一組進程間交換數據的協議,側重於函數的定義形式,而不是具體的實現方式或者數據格式,主要是為了讓c的代碼可以在不同的系統上保持源代碼級的兼容性。最初用在unix系統中。套接字也有很多不同的實現版本,稍有差異,不過對於我們在windows平台上工作的人來說,unix各種平台間的差異我們並不關心。
我們現在經常把套接字用於網路通訊編程,並且通常構造在tcp/ip協議上。在windows系統上套接字還可以使用其他協議比如ipx,甚至你可以實現一個擴展通過磁碟文件在進程間交換數據。
微軟,把套接字作了進一步的擴展,主要是做了非同步套接字的擴展,以便更好的利用windows的特性。
Ⅵ windows開發函數前面的wsa是什麼意思
1 WSA是什麼?
WSA可以是 Windows Socket API的簡稱。
另外,WSA用於Windows網路Socket的API函數的前綴, 它的全稱是Windows Sockets Asynchronous, 即Windows非同步套接字。
2 Socket是什麼?
指伯克利套接字(Berkeley sockets,也稱為BSD Socket), Socket是進程間進行通信常用方法,BSD Socket作為API,允許不同主機或者同一個計算機上的不同進程之間的通信,是用C語言編寫的函數庫。
3 Windows Socket 是什麼?
Windows Socket 遵守BSD UNIX 中流行的Socket 介面為範例, 同時含了一組針對Windows 的擴展庫函數,以使程序員能充分地利用Windows 消息驅動機制進行編程。
4 Windows Sockets Asynchronous 又是什麼?
微軟做完BSD Socket的Windows化後,就有了一個標準的Berkely Sockets的應用集合,以及為Windows應用所作的擴充。又把Windows消息機制和網路事件的非同步機制結合, 就得到了Windows Sockets Asynchronous。 凡是做了此類擴充的API函數,都加上了WSA前綴。 這樣socket就完全和Windows有機結合啦,