tcpsockets編程
❶ 採用tcp協議,使用socket編程,編寫程序完成客戶端發送消息給服務端,服務端接到消息後,再發
服務端代碼:
/*server.c*/
#include <sys/types.h>
#include <sys/socket.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/ioctl.h>
#include <unistd.h>
#include <netinet/in.h>
#define PORT 4321
#define BUFFER_SIZE 1024
#define MAX_QUE_CONN_NM 5
int main()
{
struct sockaddr_in server_sockaddr, client_sockaddr;
int sin_size, recvbytes;
int sockfd, client_fd;
char buf[BUFFER_SIZE];
/*建立socket連接*/
if ((sockfd = socket(AF_INET,SOCK_STREAM,0))== -1)
{
perror("socket");
exit(1);
}
printf("Socket id = %d\n",sockfd);
/*設置sockaddr_in 結構體中相關參數*/
server_sockaddr.sin_family = AF_INET;
server_sockaddr.sin_port = htons(PORT);
server_sockaddr.sin_addr.s_addr = INADDR_ANY;
bzero(&(server_sockaddr.sin_zero), 8);
int i = 1;/* 使得重復使用本地地址與套接字進行綁定 */
setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &i, sizeof(i));
/*綁定函數bind*/
if (bind(sockfd, (struct sockaddr *)&server_sockaddr, sizeof(struct sockaddr))== -1)
{
perror("bind");
exit(1);
}
printf("Bind success!\n");
/*調用listen函數*/
if (listen(sockfd, MAX_QUE_CONN_NM) == -1)
{
perror("listen");
exit(1);
}
printf("Listening....\n");
/*調用accept函數,等待客戶端的連接*/
if ((client_fd = accept(sockfd, (struct sockaddr *)&client_sockaddr, &sin_size)) == -1)
{
perror("accept");
exit(1);
}
/*調用recv函數接收客戶端的請求*/
memset(buf , 0, sizeof(buf));
if ((recvbytes = recv(client_fd, buf, BUFFER_SIZE, 0)) == -1)
{
perror("recv");
exit(1);
}
printf("Received a message: %s\n", buf);
if ((sendbytes = send(sockfd, buf, strlen(buf), 0)) == -1)
{
perror("send");
exit(1);
}
close(sockfd);
exit(0);
}
客戶端:
/*client.c*/
#include <sys/types.h>
#include <sys/socket.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/ioctl.h>
#include <unistd.h>
#include <netdb.h>
#include <netinet/in.h>
#define PORT 4321
#define BUFFER_SIZE 1024
int main(int argc, char *argv[])
{
int sockfd, sendbytes;
char buf[BUFFER_SIZE];
struct hostent *host;
struct sockaddr_in serv_addr;
if(argc < 3)
{
fprintf(stderr,"USAGE: ./client Hostname(or ip address) Text\n");
exit(1);
}
/*地址解析函數*/
if ((host = gethostbyname(argv[1])) == NULL)
{
perror("gethostbyname");
exit(1);
}
memset(buf, 0, sizeof(buf));
sprintf(buf, "%s", argv[2]);
/*創建socket*/
if ((sockfd = socket(AF_INET,SOCK_STREAM,0)) == -1)
{
perror("socket");
exit(1);
}
/*設置sockaddr_in 結構體中相關參數*/
serv_addr.sin_family = AF_INET;
serv_addr.sin_port = htons(PORT);
serv_addr.sin_addr = *((struct in_addr *)host->h_addr);
bzero(&(serv_addr.sin_zero), 8);
/*調用connect函數主動發起對伺服器端的連接*/
if(connect(sockfd,(struct sockaddr *)&serv_addr, sizeof(struct sockaddr))== -1)
{
perror("connect");
exit(1);
}
/*發送消息給伺服器端*/
if ((sendbytes = send(sockfd, buf, strlen(buf), 0)) == -1)
{
perror("send");
exit(1);
}
if ((recvbytes = recv(sockfd, buf, BUFFER_SIZE, 0)) == -1)
{
perror("recv");
exit(1);
}
close(sockfd);
exit(0);
}
❷ TCP 和 UDP 在socket編程中的區別
UDP和TCP編程步驟也有些不同,如下:
TCP編程的伺服器端一般步驟是:
1、創建一個socket,用函數socket();
2、設置socket屬性,用函數setsockopt(); * 可選
3、綁定IP地址、埠等信息到socket上,用函數bind();
4、開啟監聽,用函數listen();
5、接收客戶端上來的連接,用函數accept();
6、收發數據,用函數send()和recv(),或者read()和write();
7、關閉網路連接;
8、關閉監聽;
TCP編程的客戶端一般步驟是:
1、創建一個socket,用函數socket();
2、設置socket屬性,用函數setsockopt();* 可選
3、綁定IP地址、埠等信息到socket上,用函數bind();* 可選
4、設置要連接的對方的IP地址和埠等屬性;
5、連接伺服器,用函數connect();
6、收發數據,用函數send()和recv(),或者read()和write();
7、關閉網路連接;
與之對應的UDP編程步驟要簡單許多,分別如下:
UDP編程的伺服器端一般步驟是:
1、創建一個socket,用函數socket();
2、設置socket屬性,用函數setsockopt();* 可選
3、綁定IP地址、埠等信息到socket上,用函數bind();
4、循環接收數據,用函數recvfrom();
5、關閉網路連接;
UDP編程的客戶端一般步驟是:
1、創建一個socket,用函數socket();
2、設置socket屬性,用函數setsockopt();* 可選
3、綁定IP地址、埠等信息到socket上,用函數bind();* 可選
4、設置對方的IP地址和埠等屬性;
5、發送數據,用函數sendto();
6、關閉網路連接;
❸ Python 之 Socket編程(TCP/UDP)
socket(family,type[,protocal]) 使用給定的地址族、套接字類型、協議編號(默認為0)來創建套接字。
有效的埠號: 0~ 65535
但是小於1024的埠號基本上都預留給了操作系統
POSIX兼容系統(如Linux、Mac OS X等),在/etc/services文件中找到這些預留埠與的列表
面向連接的通信提供序列化、可靠的和不重復的數據交付,而沒有記錄邊界。意味著每條消息都可以拆分多個片段,並且每個消息片段都能到達目的地,然後將它們按順序組合在一起,最後將完整的信息傳遞給等待的應用程序。
實現方式(TCP):
傳輸控制協議(TCP), 創建TCP必須使用SOCK_STREAM作為套接字類型
因為這些套接字(AF_INET)的網路版本使用網際網路協議(IP)來搜尋網路中的IP,
所以整個系統通常結合這兩種協議(TCP/IP)來進行網路間數據通信。
數據報類型的套接字, 即在通信開始之前並不需要建議連接,當然也無法保證它的順序性、可靠性或重復性
實現方式(UDP)
用戶數據包協議(UDP), 創建UDP必須使用SOCK_DGRAM (datagram)作為套接字類型
它也使用網際網路來尋找網路中主機,所以是UDP和IP的組合名字UDP/IP
注意點:
1)TCP發送數據時,已建立好TCP連接,所以不需要指定地址。UDP是面向無連接的,每次發送要指定是發給誰。
2)服務端與客戶端不能直接發送列表,元組,字典。需要字元串化repr(data)。
TCP的優點: 可靠,穩定 TCP的可靠體現在TCP在傳遞數據之前,會有三次握手來建立連接,而且在數據傳遞時,有確認、窗口、重傳、擁塞控制機制,在數據傳完後,還會斷開連接用來節約系統資源。
TCP的缺點: 慢,效率低,佔用系統資源高,易被攻擊 TCP在傳遞數據之前,要先建連接,這會消耗時間,而且在數據傳遞時,確認機制、重傳機制、擁塞控制機制等都會消耗大量的時間,而且要在每台設備上維護所有的傳輸連接,事實上,每個連接都會佔用系統的CPU、內存等硬體資源。 而且,因為TCP有確認機制、三次握手機制,這些也導致TCP容易被人利用,實現DOS、DDOS、CC等攻擊。
什麼時候應該使用TCP : 當對網路通訊質量有要求的時候,比如:整個數據要准確無誤的傳遞給對方,這往往用於一些要求可靠的應用,比如HTTP、HTTPS、ftp等傳輸文件的協議,POP、SMTP等郵件傳輸的協議。 在日常生活中,常見使用TCP協議的應用如下: 瀏覽器,用的HTTP FlashFXP,用的FTP Outlook,用的POP、SMTP Putty,用的Telnet、SSH QQ文件傳輸.
UDP的優點: 快,比TCP稍安全 UDP沒有TCP的握手、確認、窗口、重傳、擁塞控制等機制,UDP是一個無狀態的傳輸協議,所以它在傳遞數據時非常快。沒有TCP的這些機制,UDP較TCP被攻擊者利用的漏洞就要少一些。但UDP也是無法避免攻擊的,比如:UDP Flood攻擊……
UDP的缺點: 不可靠,不穩定 因為UDP沒有TCP那些可靠的機制,在數據傳遞時,如果網路質量不好,就會很容易丟包。
什麼時候應該使用UDP: 當對網路通訊質量要求不高的時候,要求網路通訊速度能盡量的快,這時就可以使用UDP。 比如,日常生活中,常見使用UDP協議的應用如下: QQ語音 QQ視頻 TFTP ……
❹ TCP 和 UDP 在socket編程中的區別
一、TCP與UDP的緩好畢區別
基於連接與無連接
對系統資源的要求(TCP較多,UDP少)
UDP程序結構較簡單
流模式與數據報模式
TCP保證數據正確性,UDP可能丟包
TCP保證數據順序,UDP不保證
部分滿足以下幾點要求時,應該採用UDP 面向數據報方式 網路數據大多為短消息
擁有大量Client
對數據安全性無特殊要求
網路負擔非常重,但對響應速度要求高
具體編程時的區別 socket()的參數不同
UDP Server不需要調用listen和accept
UDP收發數據用sendto/recvfrom函數
TCP:地址信息在connect/accept時確定
襪握UDP:擾芹在sendto/recvfrom函數中每次均 需指定地址信息
UDP:shutdown函數無效
❺ 利用UDP Sockets技術實現IP多點傳送
摘要 本文介紹了UDP Sockets的基本概念和IP多點傳送的原理 詳細討論了java中的相關類及使用方法 提供了一個IP多點傳送的開發流程 關鍵詞 JavaUDP Sockets一 IP多點傳送 IP多點傳送(multicast delivery)是針對點到點的傳送和廣播傳送兩種方式而言的 它是指在一定的組內對其成員進行的廣播 是一種有限的廣播 組中的某個成員發出的信息 組中的其它所有成員都能收到 它是UDP Sockets的一個分支 IP多點傳送特別適合與高帶寬的應用 例如在網路上發送視頻和音頻 隨著網路帶寬的不斷提高和網路通訊質量的不斷改善 IP多點傳送還將廣泛地被應用於網上聊天及網上會議 分布式數據存儲 聯機事務處理 互動式游戲等方面 另外 多點傳送還可以被客戶機用於在網路上尋找相應的伺服器 客戶機發送一個多點傳送的拍攜請求 任何監聽伺服器都可以與客戶機叢銷連接並開始一個事務
二 UDP Socket基礎 使用用戶數據報協議(User Datagram Protocol 簡稱UDP)進行會話必須將信息裝配成一定尺寸的小報文 當發送一條信息 接收方能否收到並返回信息永遠是不確定的 如果無法收到返回信息 我們就無法確定我們發送的信息是否被接收——它可能在途中丟失 接收者返回的響應信息也可能丟失 另外 接收者也可能忽略我們的信息 因此 UDP被描述為不可靠的 無連接的和面向消息的 創建UDP sockets非常象創建一個郵箱 郵箱是使用地址來識別的 但是 我們不需要為每個發送信息的人構造一個新的郵箱 可以在含有發送信息的明信片上寫上目的地址 將其放在郵箱中並發送出去 接收者可能會長久的等待 直到含有信息的明信片到達它的郵箱 而明信片上標識了發送者的返回地址
三 IP多點傳送的原理 為了支持IP多點傳送 某些范圍的IP地址被單獨留出專門用於這個目的 這些IP地址是D類地址 其地址的最高四比特的位模式為 即IP地址的范圍在 和 之間 它們中的每一個IP地址都可以被引用作為一個多點傳送組 任何以該IP地址編址的IP報文將被該組中的其它所有機器接收 也就是說 一個IP地址就襲鄭伏相當於一個郵箱 另外 組中的成員是動態的並隨時間而改變 對於IP多點傳送 網間網組管理協議(Internet Group Management Protocol 簡稱IGMP) 用於管理多點傳送組中的成員 支持多點傳送的路由可以使用IGMP決定本地的機器是否贊成加入某個組 一個多點傳送路由可以決定是否轉發一個多點傳送報文 影響多點傳送報文的一個重要參數是time-to-live(TTL) TTL用於描述發送者希望傳送的信息能通過多少不同的網路 當報文被路由器轉發 報文中的TTL將減一 當TTL為零時 報文將不再向前發送 在實際使用中 我們必須注意下面幾點 這些IP地址只能作為信宿地址使用 絕對不能出現在任何信源地址域中 也不能出現在源路徑或記錄路徑選項中 由於IP多點傳送是一對多的傳送 因此 不能利用差錯與控制報文協議(Internet Control Message Protocol 簡稱ICMP)產生出錯報文 發送一個信息到一個組 發送主機可以不是組中的成員 一些組被Internet Assigned Numbers Authority(IANA)分配 保留用於特殊的目的 詳情參見 ftp://ftp internic net/rfc/rfc txt 另外 避免使用一些保留組 從 到 僅限於本地子網使用 建議在 和 之間任意選取一個IP地址 如果我們選取的組已經被使用 與其他機器的通訊將會混亂 一旦發生 可以退出應用 試試其他的地址 當一個機器加入一個多點傳送組 它將開始接收該IP多點傳送地址的信息 如果多點傳送報文分發到網路上 任何監聽該信息的機器都會有機會接收它 對於IP多點傳送 沒有一個機制對相同網路上的機器能否加入該多點傳送組加以限制 因此 安全性是我們必須考慮的問題之一 選擇的TTL參數應盡可能小 一個大的TTL值會不必要地佔用Internet帶寬 此外 還可能破壞不同區域使用相同組的其它的多點傳送通訊
四 Java中與IP多點傳送相關的類 java net包中含有UDP通訊所需要的工具 其中包括IP多點傳送
1 DatagramPacket類 我們可以使用DatagramPacket類創建一個用於發送的數據報 而當接收UDP數據報時 可以使用DatagramPacket類讀取數據報中的數據 發送者及其它信息 為了創建一個數據報並發送到遠地系統 可以使用下面的構造器 Public DatagramPacket(byte ibuf int length InetAddress iaddr int iport ); ibuf是編碼信息數據的位元組數組 它的長度length就是數據報放在其中的位元組數組的長度 iaddr是一個InetAddress對象 存儲著接收方的主機名和IP地址等信息 iport標識數據報發送到接收主機的埠 為了接收數據報 必須使用DatagramPacket構造器 其原型為 public DatagramPacket(byte ibuf int ilength);ibuf是指接收的數據報的數據部分 ilength是該部分數據的長度 如果 ilength 小於機器接收的UDP數據報的尺寸 多餘的位元組將被Java忽略 另外 類中有一些方法(method)可以讓我們得到一些相關的信息 public int getLength();//得到數據報中數據塊的位元組尺寸 public bytegetData();//得到接收數據報中的數據 public InetAddress getAddress();//為發送者提供一個 InetAddress對象 public int getPort();//得到UDP埠 值得注意的是 TCP sockets的編程中 我們無須將傳送的數據分塊 然而 當我們創建一個基於UDP的網路通訊應用程序時 必須創建一套方法 在運行時刻決定需分割的數據報的長度 對於TCP/IP 最大的數據報可以含有 位元組的數據 然而 主機僅能接收最多 位元組的數據 支持 位元組的大數據報的平台是利用IP層對數據報進行分割的 如果在傳送期間 任何含有IP報文的一個數據塊丟失 都會造成整個UDP數據報的丟失 因此 我們在確定應用中數據報尺寸時 對其尺寸的合理性一定要謹慎 下面就是分割數據的一個例子 //循環地從輸入流input中讀一行數據 while((nextLine=input readLine())!=null){ //定義一個空數據報 其尺寸為 mcastBuffer=new byte[ ]; //如果讀入的數據的長度大於定義的數據報的長度 //則使用定義的長度 否則使用讀入數據的長度 if(nextLine length()>mcastBuffer length){ sendLength=mcastBuffer length; }else { sendLenth=nextLine length(); } //將讀入的數據轉換為byte類型 lineData=nextLine getBytes(); //將數據復制到用於創建數據報的byte數組 for(int i= ;i mcastBuffer[i]=lineData[i]; } ……創建數據報 發送或接收…… }
2 MulticastSocket類 Java的 MulticastSocket類是實施IP多點傳送網路特徵的關鍵 它允許我們使用多點傳送IP發送或接收UDP數據報 MulticastSocket的構造器為 public MulticastSocket () throws IOException;//創建一個多點傳送socket public MulticastSocket(int port)throws IOException;//在指定埠創建一個多點傳送socket 另外 類中其它常用的方法有 public void joinGroup(InetAddress mcastaddr)throws IOException{} //加入多點傳送組 public void leaveGroup(InetAddress mcastaddr)throws IOException{} //離開多點傳送組 public synchronized void send(DatagramPacket p byte ttl) throws IOException{}//發送數據報 public synchronized void receive(DatagramPacket p byte ttl) throws IOException{} //接收數據報 創建一個DatagramPacket對象之後 我們必須相應地創建一個 MulticastSocket對象 這樣 數據報就可以使用send()方法發送了 下面的代碼演示了如何創建 MulticastSocket 發送和接收IP多點傳送數據報 int multiPort= ;//定義埠號 非超級用戶應使用 以上的埠 int ttl= ; //設定TTL值 InetAddress multiAddr=InetAddress getByName(″ ″) //設定多點傳送IP byteSmultiBytes={ H e O }; //定義一個內容為 Hello 的數據報 //創建多點傳送數據報 DatagramPacket SmultiDatagram new Datagram Packet(SmultiBytes SmultiBytes length multiAddr multiPort); MulticastSocket multiSocket=new MulticastSocket(); //創建多點傳送socket multiSocket send(SmultiDatagram ttl) //發送數據報(不加入到組中) …… byteRmultiBytes=new byte[ ];//定義一個空數據報 長度為 位元組 //創建接收數據報 DatagramPacket RmultiDatagram=new DatagramPacket(RmultiBytes RmultiBytes length); multiSocket joinGroup(multiAddr);//加入到多點傳送組中 multiSocket receive(RmultiDatagram);//接收UDP數據報
…… multiSocket leaveGroup(multiAddr);//離開多點傳送組 multiSocket close(); //關閉多點傳送 socket 當調用joinGroup()方法時 機器將關注沿著網路傳送屬於特定多點傳送組的任何IP報文 也就是說 機器擁有了一個郵箱 主機還應使用IGMP相應地報告組的使用 對於多IP地址的機器 應配置數據報發送的介面 setInterface(oneOfMyLocalAddrs); 在DatagramSocket中沒有類似 setSo Timeout()的方法設置超時
五 IP多點傳送應用程序的開發流程 由於IP多點傳送主要用於同組中成員的交流 因此 應用程序的開發流程大體如下 創建一個需發送的按規定編址的數據報DatagramPacket; 建立一個用於發送和接收的MulticastSocket; 加入一個多點傳送組 將數據報放入MulticastSocket中傳送出去 等待從MulticastSocket接收數據報 解碼數據報提取信息 根據得到的信息作出回應 重復 — 步 離開該多點傳送組 關閉MulticastSocket
lishixin/Article/program/Java/hx/201311/27230
❻ QT 編程QTcpSocket 類write函數
if(m_httpAddress.isEmpty() || sendBuffer.isEmpty())
{
return 0;
}//伺服器地址或者需要發送的數據為空直接返回
QTcpSocket socket;
socket.connectToHost(m_httpAddress, m_httpPort);//建立一個TCP連接,主機地址是m_httpAddress,埠號是httpPort
socket.setSocketOption(QAbstractSocket::LowDelayOption, 1);//優化為最低延遲,後面的1代碼啟用該優化。
if (!socket.waitForConnected())
{
return 0;
}
//等待連接,如果超過3s沒有客戶端連接將退出。
socket.write(sendBuffer);//開始傳輸數據
socket.waitForBytesWritten();
while (socket.waitForReadyRead(60000))//在6s內完成數據的傳輸
{
while (socket.bytesAvailable())
{
receiveBuffer += socket.readAll();
}//如果傳輸數據不為0,那麼接受數據buffer加上該值
}
socket.close();//關閉I/O數據傳輸以及Tcp連接,並重置主機名和埠號
❼ 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();//必須調用這個函數清除參數
}
❽ 什麼是網路編程
網路編程的主要對象就是瀏覽器
因為我們上網基本上是依賴瀏覽器的,當然,像游戲,聊天軟體等等這些不依賴瀏覽器,但需要網路協議,不同的協議,有不同的共能,網路編程就是做這些,瀏覽器:一大堆介面給你擺這了,想做成什麼樣?自己實現去吧。網路協議:這個跟前面的差不多也有一些介面,或者服務條款等等(嘿嘿,還沒研究那麼深)然後還是要我們編程人員來實現,我們可以從以上信息中得到它們運行的機制,特點,模式,語言,服務規定等等信息,熟知這些後,我們就可以編程了,利用它自身的東西,在加上我們需要而且符合它規范,且可運行的東西,就是編出來的東西啦~這個就是網路編程啦~HOHO