當前位置:首頁 » 編程軟體 » 什麼是socket編程

什麼是socket編程

發布時間: 2023-12-12 00:20:53

㈠ Socket編程

最近也在學 還有一個自己寫的C++聊天程序 有點大 下面是C寫的
sockets(套接字)編程有三種,流式套接字(SOCK_STREAM),數據報套接字 (SOCK_DGRAM),原始套接字(SOCK_RAW);基於TCP的socket編程是採用的流式套接字(SOCK_STREAM)。基於UDP采 用的數據報套接字(SOCK_DGRAM).
1.TCP流式套接字的編程步驟
在使用之前須鏈接庫函數:工程->設置->Link->輸入ws2_32.lib,OK!
伺服器端程序:
1、載入套接字型檔
2、創建套接字(socket)。
3、將套接字綁定到一個本地地址和埠上(bind)。
4、將套接字設為監聽模式,准備接收客戶請求(listen)。
5、等待客戶請求到來;當請求到來後,接受連接請求,返回一個新的對應於此次連接的套接字(accept)。
6、用返回的套接字和客戶端進行通信(send/recv)。
7、返回,等待另一客戶請求。
8、關閉套接字。
客戶端程序:
1、載入套接字型檔
2、創建套接字(socket)。
3、向伺服器發出連接請求(connect)。
4、和伺服器端進行通信(send/recv)。
5、關閉套接字
伺服器端代碼如下:
#include <Winsock2.h>//加裁頭文件
#include <stdio.h>//載入標准輸入輸出頭文件

void main()
{
WORD wVersionRequested;//版本號
WSADATA wsaData;
int err;

wVersionRequested = MAKEWORD( 1, 1 );//1.1版本的套接字

err = WSAStartup( wVersionRequested, &wsaData );
if ( err != 0 ) {
return;
}//載入套接字型檔,加裁失敗則返回

if ( LOBYTE( wsaData.wVersion ) != 1 ||
HIBYTE( wsaData.wVersion ) != 1 ) {
WSACleanup( );
return;
}//如果不是1.1的則退出
SOCKET sockSrv=socket(AF_INET,SOCK_STREAM,0);//創建套接字(socket)。

SOCKADDR_IN addrSrv;
addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);//轉換Unsigned short為網路位元組序的格式
addrSrv.sin_family=AF_INET;
addrSrv.sin_port=htons(6000);

bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));
//將套接字綁定到一個本地地址和埠上(bind)
listen(sockSrv,5);//將套接字設為監聽模式,准備接收客戶請求(listen)。

SOCKADDR_IN addrClient;//定義地址族
int len=sizeof(SOCKADDR);//初始化這個參數,這個參數必須被初始化

while(1)
{
SOCKET sockConn=accept(sockSrv,(SOCKADDR*)&addrClient,&len);//accept的第三個參數一定要有初始值。
//等待客戶請求到來;當請求到來後,接受連接請求,返回一個新的對應於此次連接的套接字(accept)。
//此時程序在此發生阻塞
char sendBuf[100];
sprintf(sendBuf,"Welcome %s to http://www.sunxin.org",
inet_ntoa(addrClient.sin_addr));
//用返回的套接字和客戶端進行通信(send/recv)。
send(sockConn,sendBuf,strlen(sendBuf)+1,0);
char recvBuf[100];
recv(sockConn,recvBuf,100,0);
printf("%s\n",recvBuf);
closesocket(sockConn);//關閉套接字。等待另一個用戶請求
}
}
客戶端代碼如下:
#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);創建套接字(socket)。

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));向伺服器發出連接請求(connect)。

char recvBuf[100];和伺服器端進行通信(send/recv)。
recv(sockClient,recvBuf,100,0);
printf("%s\n",recvBuf);
send(sockClient,"This is lisi",strlen("This is lisi")+1,0);

closesocket(sockClient);關閉套接字。
WSACleanup();//必須調用這個函數清除參數
}

㈡ 什麼是java socket

事實上網路編程簡單的理解就是兩台計算機相互通訊數據而已,對於程序員而言,去掌握一種編程介面並使用一種編程模型相對就會顯得簡單的多了,Java SDK提供一些相對簡單的Api來完成這些工作。Socket就是其中之一,對於Java而言,這些Api存在與java.net 這個包裡面,因此只要導入這個包就可以准備網路編程了。

網路編程的基本模型就是客戶機到伺服器模型,簡單的說就是兩個進程之間相互通訊,然後其中一個必須提供一個固定的位置,而另一個則只需要知道這個固定的位置。並去建立兩者之間的聯系,然後完成數據的通訊就可以了,這里提供固定位置的通常稱為伺服器,而建立聯系的通常叫做客戶端,基於這個簡單的模型,就可以進入網路編程啦。

Java對這個模型的支持有很多種Api,而這里我只想介紹有關Socket的編程介面,對於Java而言已經簡化了Socket的編程介面。首先我們來討論有關提供固定位置的服務方是如何建立的。Java提供了ServerSocket來對其進行支持.事實上當你創建該類的一個實力對象並提供一個埠資源你就建立了一個固定位置可以讓其他計算機來訪問你,ServerSocket server=new ServerSocket(6789);這里稍微要注意的是埠的分配必須是唯一的。因為埠是為了唯一標識每台計算機唯一服務的,另外埠號是從0~65535之間的,前1024個埠已經被Tcp/Ip 作為保留埠,因此你所分配的埠只能是1024個之後的。好了,我們有了固定位置.現在所需要的就是一根連接線了.該連接線由客戶方首先提出要求。因此Java同樣提供了一個Socket對象來對其進行支持,只要客戶方創建一個Socket的實例對象進行支持就可以了。Socket client
=new Socket(InetAddress.getLocalHost(),5678);客戶機必須知道有關伺服器的IP地址,對於著一點Java也提供了一個相關的類InetAddress 該對象的實例必須通過它的靜態方法來提供,它的靜態方法主要提供了得到本機IP 和通過名字或IP直接得到InetAddress的方法。

上面的方法基本可以建立一條連線讓兩台計算機相互交流了,可是數據是如何傳輸的呢?事實上I/O操作總是和網路編程息息相關的。因為底層的網路是繼續數據的,除非遠程調用,處理問題的核心在執行上,否則數據的交互還是依賴於IO操作的,所以你也必須導入java.io這個包.java的IO操作也不復雜,它提供了針對於位元組流和Unicode的讀者和寫者,然後也提供了一個緩沖用於數據的讀寫。

在網路搜索里輸入java socket會有N多的結果給你答案。

㈢ socket編程到底是什麼

socket 其實就是操作系統提供給程序員操作「網路協議棧」的介面,說人話就是,你能通過socket 的介面,來控制協議找工作,從而實現網路通信,達到跨主機通信。

協議棧的上半部分有兩塊,分別是負責收發數據的 TCP 和 UDP 協議,它們兩會接受應用層的委託執行收發數據的操作。

協議棧的下面一半是用 IP 協議控制網路包收發操作,在互聯網上傳數據時,數據會被切分成一塊塊的網路包,而將網路包發送給對方的操作就是由 IP 負責的。這里需要注意的是,服務端調用 accept 時,連接成功了會返回一個已完成連接的 socket,後續用來傳輸數據。

所以,監聽的 socket 和真正用來傳送數據的 socket,是「兩個」 socket,一個叫作監聽 socket,一個叫作已完成連接 socket。成功連接建立之後,雙方開始通過 read 和 write 函數來讀寫數據,就像往一個文件流裡面寫東西一樣。

㈣ 什麼是winsocket編程介面

Windows下網路編程的規范-Windows
Sockets是Windows下得到廣泛應用的、開放的、支持多種協議的網路編程介面。從1991年的1.0版到1995年的2.0.8版,經過不斷完善並在Intel、Microsoft、Sun、SGI、Informix、Novell等公司的全力支持下,已成為Windows網路編程的事實上的標准。
Windows
Sockets規范以U.C.
Berkeley大學BSD
UNIX中流行的Socket介面為範例定義了一套Micosoft
Windows下網路編程介面。它不僅包含了人們所熟悉的Berkeley
Socket風格的庫函數;也包含了一組針對Windows的擴展庫函數,以使程序員能充分地利用Windows消息驅動機制進行編程。Windows
Sockets規範本意在於提供給應用程序開發者一套簡單的API,並讓各家網路軟體供應商共同遵守。此外,在一個特定版本Windows的基礎上,Windows
Sockets也定義了一個二進制介面(ABI),以此來保證應用Windows
Sockets
API的應用程序能夠在任何網路軟體供應商的符合Windows
Sockets協議的實現上工作。因此這份規范定義了應用程序開發者能夠使用,並且網路軟體供應商能夠實現的一套庫函數調用和相關語義。遵守這套Windows
Sockets規范的網路軟體,我們稱之為Windows
Sockets兼容的,而Windows
Sockets兼容實現的提供者,我們稱之為Windows
Sockets提供者。一個網路軟體供應商必須百分之百地實現Windows
Sockets規范才能做到現Windows
Sockets兼容。任何能夠與Windows
Sockets兼容實現協同工作的應用程序就被認為是具有Windows
Sockets介面。我們稱這種應用程序為Windows
Sockets應用程序。Windows
Sockets規范定義並記錄了如何使用API與Internet協議族(IPS,通常我們指的是TCP/IP)連接,尤其要指出的是所有的Windows
Sockets實現都支持流套介面和數據報套介面.應用程序調用Windows
Sockets的API實現相互之間的通訊。Windows
Sockets又利用下層的網路通訊協議功能和操作系統調用實現實際的通訊工作。它們之間的關系如圖
通信的基礎是套介面(Socket),一個套介面是通訊的一端。在這一端上你可以找到與其對應的一個名字。一個正在被使用的套介面都有它的類型和與其相關的進程。套介面存在於通訊域中。通訊域是為了處理一般的線程通過套介面通訊而引進的一種抽象概念。套介面通常和同一個域中的套介面交換數據(數據交換也可能穿越域的界限,但這時一定要執行某種解釋程序)。Windows
Sockets規范支持單一的通訊域,即Internet域。各種進程使用這個域互相之間用Internet協議族來進行通訊(Windows
Sockets
1.1以上的版本支持其他的域,例如Windows
Sockets
2)。套介面可以根據通訊性質分類;這種性質對於用戶是可見的。應用程序一般僅在同一類的套介面間通訊。不過只要底層的通訊協議允許,不同類型的套介面間也照樣可以通訊。用戶目前可以使用兩種套介面,即流套介面和數據報套介面。流套介面提供了雙向的,有序的,無重復並且無記錄邊界的數據流服務。數據報套介面支持雙向的數據流,但並不保證是可靠,有序,無重復的。也就是說,一個從數據報套介面接收信息的進程有可能發現信息重復了,或者和發出時的順序不同。數據報套介面的一個重要特點是它保留了記錄邊界。對於這一特點,數據報套介面採用了與現在許多包交換網路(例如乙太網)非常類似的模型。
一個在建立分布式應用時最常用的範例便是客戶機/伺服器模型。在這種方案中客戶應用程序向伺服器程序請求服務。這種方式隱含了在建立客戶機/伺服器間通訊時的非對稱性。客戶機/伺服器模型工作時要求有一套為客戶機和伺服器所共識的慣例來保證服務能夠被提供(或被接受)。這一套慣例包含了一套協議。它必須在通訊的兩頭都被實現。根據不同的實際情況,協議可能是對稱的或是非對稱的。在對稱的協議中,每一方都有可能扮演主從角色;在非對稱協議中,一方被不可改變地

熱點內容
ipad導出緩存b站視頻 發布:2024-11-17 10:29:33 瀏覽:355
mc手機版伺服器搭建 發布:2024-11-17 10:23:38 瀏覽:54
豐田普拉vxl什麼配置 發布:2024-11-17 10:23:37 瀏覽:79
clindexphp 發布:2024-11-17 10:22:12 瀏覽:47
在線編輯器php 發布:2024-11-17 10:04:44 瀏覽:256
神經網路演算法C 發布:2024-11-17 10:02:25 瀏覽:207
我的世界如何開伺服器飛天 發布:2024-11-17 09:58:34 瀏覽:638
全志源碼包 發布:2024-11-17 09:56:18 瀏覽:374
索立信家長管理密碼一般是什麼 發布:2024-11-17 09:56:16 瀏覽:415
怎麼播放uc緩存視頻怎麼下載視頻 發布:2024-11-17 09:55:19 瀏覽:570