1. 程式人生 > >cocos2dx的區域網通訊實現----socket函式集初識

cocos2dx的區域網通訊實現----socket函式集初識

學習網路通訊的第一步是要弄清楚網路通訊的模型。首先要對tcp/ip協議模型有個最基本的理解。

然後接著就需要了解一些函式的基本用法和使用方法,比較坑爹的地方是,網路通訊的相關的函式都是很多引數,而且很難理解它的作用。

以下是總結的一些網路通訊函式的基本用法,網路通訊大部分都是和這些函式打交道的。推薦本書《unix網路程式設計》。下面的解釋就是參考的這本書。

1.socket函式 

int socket(int family,int type,int protocol);   成功返回資源描述符(windows是socket,linux系列是int型)。 失敗返回-1。

第一個引數:family 結構體定義解釋 AF_INET ipv4協議 一般情況下都是這個引數。

第一個引數:type  SOCK_STREAM tcp位元組流,tcp協議使用。  SOCK_DGRAM資料報 udp使用。SOCK_RAW原始套接字(抓包)

第一個引數:protocol 制定協議 如果為0系統會自動根據前面設定推演。推薦填寫0

返回的資源描述符也叫套接字,類似於fopen開啟檔案返回的FILE*結構體。是系統自動分配的。呼叫socket函式的時候,會向作業系統申請資源,成功會返回資源描述分配給程式,失敗返回-1。不使用的時候一定要關閉這個資源描述符。也就是呼叫close(fd);如果不呼叫,系統就會等到程序退出的時候才回收。

2.bind函式

int bind(int sockfd,const struct sockaddr *servaddr,socklen_t addrlen);  成功0 失敗-1

繫結主機的一個ip地址和埠給資源描述符。也可以把ip設為INADDR_ANY一個值為0的巨集。這樣就會繫結主機的所有ip的某個埠給程序。port可設為0,系統自行選擇埠。

2.connect函式   tcp客戶端呼叫,用來連線服務端函式。

int connect(int sockfd,const struct sockaddr *servaddr,socklen_t addrlen);

sockfd是socket函式返回的資源描述符

servaddr服務端地址標識 sockaddr結構體  後面具體說明

addrlen地址長度 一般是sizeof(servaddr);

返回值為ETIMEDOUT。等待75秒後仍未收到響應則返回此錯誤

返回為ECONNREFUSED 伺服器主機在我們制定的埠上沒有程序在等待與之連結。能找到ip。(硬錯)

返回EHOSTUNREACH或ENETUNREACH 目的地址不可達

4.listen函式  tcp伺服器呼叫函式。只是設定可以接收的連線最大數。並不是真正的監聽

int listen(int sockfd, int backlog)  成功0 失敗-1

sockfd  資源描述符  backlog 此套接字最大連結個數 等待連結佇列的數量

5.int accept(int sockfd,struct sockaddr *servaddr,socklen_t *addrlen); 成功非負描述符  失敗-1

引數servaddr和addrlen是用來接收連線伺服器的客戶端資訊的。

正確的用法是,

struct sockaddr_in server; 

int len = 0; 

int rv = 0;

bzero(&server,sizeof(server)); 

rv = accept(fd,(struct sockaddr *)&server,&len);

如果accept執行成功,則返回為客戶端連線生成的全新描述符,代表於客戶端的連線。

6.int send(int sockfd, const char * buf, int buflen, int flags)用於向一個已經連線的socket傳送資料,如果無錯誤,返回值為所傳送資料的總數,否則返回-1。

7.int recv( int sockfd,char *buf, int buflen,int flags);  用於從一個已經連線的socket接收資料,如果無錯誤,返回值為所傳送資料的總數,否則返回-1。

recv()返回0表示客戶端正常斷開連結。

阻塞模式下,recv函式會等待直到接收到資料或者連結斷開為止。非阻塞模式下,recv立即返回,如果有資料則返回值為資料長度,否則返回-1。

以下是tcp通訊正常函式呼叫流程。

8.sendto(int sockfd,const void *buf,size_t buflen,int flags,const struct sockaddr *to,size_t addrlen)

9.recvfrom(int sockfd,const void *buf,size_t buflen,int flags,const struct sockaddr *from,size_t *addrlen)

前三個引數都是一樣的,建立的socket描述符,接收用的buf,傳送用的buf,buf的長度。第四個引數填0.

最後兩個函式,sendto是要傳送的ip地址埠的和長度,recvfrom是獲取接收資料的地址資訊。可以傳入空指標。

以下是udp通訊模型。

相關推薦

cocos2dx區域網通訊實現----socket函式初識

學習網路通訊的第一步是要弄清楚網路通訊的模型。首先要對tcp/ip協議模型有個最基本的理解。 然後接著就需要了解一些函式的基本用法和使用方法,比較坑爹的地方是,網路通訊的相關的函式都是很多引數,而且很難理解它的作用。 以下是總結的一些網路通訊函式的基本用法,網路通訊大部分都

區域網內主機之間Socket通訊實現

只能傳輸文字且只能在區域網內實現通訊 主機1: package SocketTest; import java.net.*; import java.io.*; import java.awt.*; import javax.swing.*; import java.u

【C#】-區域網下用Socket實現通訊

前言 聽起區域網下聊天是不是很難,很高大上的樣子,怎麼樣讓兩臺電腦,在同一區域網下實現聊天呢,先說一下思路吧,一會直接上程式碼。 1. 首先我們先要建立一個伺服器,也就是說兩臺電腦有一臺要當著伺服器,供客戶端連結。 2.

java代碼實現socket接口通訊(堵塞I/O)

write ice 代碼 args fin true finall tar 輸出 傳統的java實現socket通訊比較簡單實現,不過它屬於堵塞式的I/O流存取,只能由一個線程完成當前任務才能起下個一個線程,無法解決高並發; 1、簡單的socketservice

實現socket的服務和客戶端通訊

對學習過程中自己敲的一些關於socket有關的程式碼做了個簡單總結,在這分享一下,給有需要的同學借鑑一下。 什麼是socket? 網路上的兩個程式通過一個雙向的通訊連線實現資料的交換,這個連線的一端稱為一個socket。 建立網路通訊連線至少要一對埠號(socket)。socke

TCP和UDP並實現socket的簡單通訊

http://www.cnblogs.com/IPrograming/archive/2012/10/15/CSharp_Socket_4.html http://www.cnblogs.com/dolphinX/p/3460545.html 一、TCP和UDP的區別和聯絡 1.五層協議

Socket通訊過程和函式詳解

from:http://blog.csdn.net/tianmo2010/article/details/6542063 ①什麼是Socket    Socket介面是TCP/IP網路的API,Socket介面定義了許多函式或例程,程式設計師可以用它們來開發TCP/IP網路上的應用程式。要學

C++ 簡單的 Tcp 實現 socket 客戶端與客戶端通訊

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

Untiy中用C#實現TCP通訊Socket通訊)服務端與客戶端皆可

簡而言之,TCP通訊原理大家可以從各種網路文獻上找到,這裡不做贅述。 只提出C#實現TCP通訊的一般方法和常用程式碼工具供第一次接觸TCP通訊的玩家參考,老玩家繞道。。。 為了方便大家理解我的程式碼,會適當提及通訊遠離。 1、建立服務端,TCP連線的基本: using U

C#實現Socket通訊(同時監聽多客戶端)

//建立socket物件 //第一個引數:設定網路定址的協議、第二引數設定資料傳輸的方式、第三個引數設定通訊協議 Socket serverSocket = new Socket(AddressFamily.InterNetwork, SocketT

Java Socket通訊實現私聊、群聊 WebSocket+Java 私聊、群聊例項

   前言   閒言少敘,上程式碼!     程式碼編寫    server服務端 /** * 服務端 */ public class Server { private static ServerSocket server = null;

[通訊協議] [Socket程式設計] socket()函式使用講解

一.前言                 當我們進行socket程式設計時,要呼叫各種socket函式,而且還需要用到一個庫檔案 Ws2_32.lib 和一個頭檔案 Winsock2.h。 二.講解      1.函式的功能 socket()函式         

[通訊協議] [Socket程式設計]WSAGetLastError()函式使用講解

一.前言                WSAGetLastError()函式為我們進行socket程式設計時需要用到的一個函式。 二.講解      1.函式的功能 WSAGetLastError()函式          int PASCAL FAR WSAGet

glib實現Socket通訊

server #include <glib.h> #include <gio/gio.h> #include <stdio.h> gchar *buffer; gboolean network_read(GIOChann

Java使用多執行緒實現Socket多客戶端的通訊

 要想詳細瞭解socket,大家請自行百度,我這裡只簡單介紹。   在網路中,我們可以利用ip地址+協議+埠號唯一標示網路中的一個程序。而socket程式設計就是為了完成兩個唯一程序之間的通訊(一個是客戶端,一個是伺服器端),其中用到的協議是TCP/UDP協議,它們都屬於傳輸層的協議。   TCP是基於連

PCB MS SQL 標量函式(CLR) 實現Socket傳送訊息

在PCB業務系統中,資料庫中的資料總是被應用端主動連線資料庫並操作資料,是否想過可以讓資料庫主動的將資料推送出去呢! 答應其實是可以的。比如有這樣的應用場景! 當SQL SERVER資料庫滿足某個條件時,可以讓資料庫主動的將訊息傳送出去! 例如:資料庫中的某個欄位的資料發生變化或客戶端觸發了某個儲存過程時(必

C++:實現socket通訊(TCP/IP)例項

       首先宣告,博主之前從來沒有寫過通訊方面的東西,這次之所以寫這個是因為專案需要,因此本文主要介紹一個使用C++語言及Socket來實現TCP/IP通訊的例項,希望可以幫助入門者。 一、什麼是TCP/IP?         TCP提供基於IP環境下的資料可靠性傳

Socket通訊實現伺服器和客戶端對話

廣域網和區域網 介紹socket通訊前我們先介紹一下廣域網與區域網的概念。區域網簡稱LAN,是指在某一區域幾臺計算機組成的計算機組,區域網是封閉的,區域網經常採用共享通道,即共用同一條電纜。廣域網簡稱WAN,是一種跨越大的,地域性的地區性網路集合廣域網包含大大小

c# socket通訊實現簡單的視窗資訊互相傳送 (聊天室的deom)

這次使用socket來實現簡單的視窗資訊互相傳送  首先我們建立一個伺服器端 services (winfrom檔案) 這邊注意。你的ip地址和埠號可以  命令建+r  開啟cmd  輸入ipconfig找到自己的ip地址 每個人的ip地址都不一樣 程式碼部

python實現socket通訊 TCP

 Server:  # server import socket address = ('127.0.0.1', 31500) s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # s = socket.socket(