日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

c# socket接收字符串_socket通信很难?这一文让你轻松搞定!

發(fā)布時間:2025/3/15 C# 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c# socket接收字符串_socket通信很难?这一文让你轻松搞定! 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

目錄

  • 概述
  • TCP/IP協(xié)議、UDP協(xié)議
  • Socket是什么
  • socket通信流程
  • socket編程php代碼實戰(zhàn)
  • php7進階到架構(gòu)師相關(guān)閱讀

概述

這是關(guān)于php進階到架構(gòu)之php7核心技術(shù)與最佳實戰(zhàn)學習的第篇文章:socket通信很難?這一文讓你輕松搞定!

  • 第一篇:用房子的思維秒懂php7傳值與傳引用的區(qū)別
  • 第二篇: php7語法糖好甜,讓你迷上php魔術(shù)方法
  • 第三篇:php7魔術(shù)方法__call的最佳實戰(zhàn)之數(shù)據(jù)庫PDO類的驅(qū)動設(shè)計實戰(zhàn)
  • 第四篇:精通PHP正則表達式,看這一篇就夠啦!
  • 第五篇:不懂對象設(shè)計原則,都不好意思自稱php大師
  • 第六篇:socket通信很難?這一文讓你輕松搞定!

對TCP/IP、UDP、Socket編程這些詞你不會很陌生吧?隨著網(wǎng)絡(luò)技術(shù)的發(fā)展,這些詞充斥著我們的耳朵。大家能回答下面幾個問題嗎?

1.什么是TCP/IP、UDP?

2. Socket在哪里呢?

3. Socket是什么呢?

4. 怎么使用socket編程?

TCP/IP協(xié)議、UDP協(xié)議

TCP/IP(Transmission Control Protocol/Internet Protocol)即傳輸控制協(xié)議/網(wǎng)間協(xié)議,

是一個工業(yè)標準的協(xié)議集,它是為廣域網(wǎng)(WANs)設(shè)計的。

UDP(User Data Protocol,用戶數(shù)據(jù)報協(xié)議)是與TCP相對應(yīng)的協(xié)議。

它是屬于TCP/IP協(xié)議族中的一種。

這里有一張圖,表明了這些協(xié)議的關(guān)系。

TCP-IP,UDP協(xié)議關(guān)系

TCP/IP協(xié)議族包括運輸層、網(wǎng)絡(luò)層、鏈路層?,F(xiàn)在你知道TCP/IP與UDP的關(guān)系了吧。

UDP是屬于TCP/IP協(xié)議族中的一種

Socket在哪里?

在上圖中,我們沒有看到Socket的影子,那么它到底在哪里呢?請看下圖,一目了然。

socket所在位置

原來Socket在這里

Socket是什么?

Socket是應(yīng)用層與TCP/IP協(xié)議族通信的中間軟件抽象層。

它是一組接口。

在設(shè)計模式中,Socket其實就是一個門面模式,它把復雜的TCP /IP協(xié)議族隱藏在Socket接口后面。

對用戶來說,一組簡單的接口就是全部,讓Socket去組織數(shù)據(jù),以符合指定的協(xié)議。

socket通信流程

聽到Socket編程,是不覺得它是比較高深的編程知識呢?但是只要弄清Socket編程的工作原理,神秘的面紗也就揭開了。 請看下圖:

socket編程流程圖

先從服務(wù)器端說起。

服務(wù)器端先初始化Socket,

然后與端口綁定(bind),

對端口進行監(jiān)聽(listen),

調(diào)用accept阻塞,

等待 客戶端連接。

在這時如果有個客戶端初始化一個Socket,

然后連接服務(wù)器(connect),如果連接成功,這時客戶端與服務(wù)器端的連接就建立了。

客戶端發(fā)送數(shù)據(jù)請求(write),

服務(wù)器端接收請求(read)并處理請求,

然后把回應(yīng)數(shù)據(jù)發(fā)送給客戶端(write),

客戶端讀取數(shù)據(jù)(read),

最后關(guān)閉連接,一次交互結(jié)束。

搞懂socket通信流程了吧?來,對照scoket通信流程圖,代碼擼起!

socket編程php代碼實戰(zhàn)

首先,服務(wù)端代碼Server.php如下:

//確保在連接客戶端時不會超時set_time_limit(0);$ip = '127.0.0.1';$port = 8888;/* +------------------------------- * @socket通信整個過程+------------------------------- * @socket_create 1.初始化Socket * @socket_bind 2.端口綁定(bind) * @socket_listen 3.對端口進行監(jiān)聽(listen) * @socket_accept 4.調(diào)用accept阻塞,等待 客戶端連接 * @socket_read 5.接收客戶端請求數(shù)據(jù) * @socket_write 6.回應(yīng)數(shù)據(jù)發(fā)送給客戶端 * @socket_close 7.關(guān)閉連接 +-------------------------------- *//*---------------- 1.初始化Socket -------------------*///創(chuàng)建服務(wù)端的socket套接流,net協(xié)議為IPv4,protocol協(xié)議為TCP$socket = socket_create(AF_INET,SOCK_STREAM,SOL_TCP);/*---------------- 2.端口綁定(bind) -------------------*//*綁定接收的套接流主機和端口,與客戶端相對應(yīng)*/if(socket_bind($socket,$ip,$port) == false){ echo 'server bind fail:'.socket_strerror(socket_last_error()); /*這里的127.0.0.1是在本地主機測試,你如果有多臺電腦,可以寫IP地址*/}/*---------------- 3.對端口進行監(jiān)聽(listen) -------------------*///監(jiān)聽套接流if(socket_listen($socket,4)==false){ echo 'server listen fail:'.socket_strerror(socket_last_error());}/*---------------- 4.調(diào)用accept阻塞,等待 客戶端連接 -------------------*///讓服務(wù)器無限獲取客戶端傳過來的信息do{ /*接收客戶端傳過來的信息*/ $accept_resource = socket_accept($socket); /*socket_accept的作用就是接受socket_bind()所綁定的主機發(fā)過來的套接流*/ if($accept_resource !== false){ /*讀取客戶端傳過來的資源,并轉(zhuǎn)化為字符串*/ /*----------5.接收客戶端請求數(shù)據(jù)-----------*/ $string = socket_read($accept_resource,1024); /*socket_read的作用就是讀出socket_accept()的資源并把它轉(zhuǎn)化為字符串*/ echo 'server receive is :'.$string.PHP_EOL;//PHP_EOL為php的換行預定義常量 if($string != false){ $return_client = 'server receive is : '.$string.PHP_EOL; /*向socket_accept的套接流寫入信息,也就是回饋信息給socket_bind()所綁定的主機客戶端*/ /*------6.回應(yīng)數(shù)據(jù)發(fā)送給客戶端-----------*/ socket_write($accept_resource,$return_client,strlen($return_client)); /*socket_write的作用是向socket_create的套接流寫入信息,或者向socket_accept的套接流寫入信息*/ }else{ echo 'socket_read is fail'; } /*socket_close的作用是關(guān)閉socket_create()或者socket_accept()所建立的套接流*/ socket_close($accept_resource); }}while(true);socket_close($socket);

運行server.php,啟動socket服務(wù)端

php server.php

現(xiàn)在服務(wù)端的程序已經(jīng)開始運行,端口已經(jīng)開始監(jiān)聽了

客戶端client.php代碼如下:

//初始化一個Socket 創(chuàng)建一個socket套接流$socket = socket_create(AF_INET,SOCK_STREAM,SOL_TCP);/****************設(shè)置socket連接選項,這兩個步驟你可以省略*************///接收套接流的最大超時時間1秒,后面是微秒單位超時時間,設(shè)置為零,表示不管它socket_set_option($socket, SOL_SOCKET, SO_RCVTIMEO, array("sec" => 1, "usec" => 0));//發(fā)送套接流的最大超時時間為6秒socket_set_option($socket, SOL_SOCKET, SO_SNDTIMEO, array("sec" => 6, "usec" => 0));/****************設(shè)置socket連接選項,這兩個步驟你可以省略*************///連接服務(wù)端的套接流,這一步就是使客戶端與服務(wù)器端的套接流建立聯(lián)系if(socket_connect($socket,'127.0.0.1',8888) == false){ echo 'connect fail massege:'.socket_strerror(socket_last_error());}else{ $message = 'l love you 我愛你 socket'; //轉(zhuǎn)為GBK編碼,處理亂碼問題,這要看你的編碼情況而定,每個人的編碼都不同 $message = mb_convert_encoding($message,'GBK','UTF-8'); //向服務(wù)端寫入字符串信息 if(socket_write($socket,$message,strlen($message)) == false){ echo 'fail to write'.socket_strerror(socket_last_error()); }else{ echo 'client write success'.PHP_EOL; //讀取服務(wù)端返回來的套接流信息 while($callback = socket_read($socket,1024)){ echo 'server return message is:'.PHP_EOL.$callback; } }}socket_close($socket);//工作完畢,關(guān)閉套接流

運行client.php代碼:

php client.php

至此客戶端已經(jīng)連接上服務(wù)端了,并和服務(wù)端通信了。趕快本地代碼擼起來,記得查看結(jié)果哦

php7進階到架構(gòu)師相關(guān)閱讀

https://www.kancloud.cn/gofor/gofor

最后,歡迎大家留言補充,討論~~~

總結(jié)

以上是生活随笔為你收集整理的c# socket接收字符串_socket通信很难?这一文让你轻松搞定!的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。