導航:首頁 > 數據處理 > phpsocket如何接收網上廣播數據

phpsocket如何接收網上廣播數據

發布時間:2022-12-19 15:27:08

㈠ Socket簡單的數據包的發送與接收

具體的發包與拆包的協議可以自己定義:
我定義:包頭第一個位元組為1時則為接收文件為0則為接收字元
伺服器:
private static void writefile(DataOutputStream dos, FileInputStream fis) {
byte[] bytes=new byte[2];//先發包頭
int length;
bytes[0]=1;
bytes[1]=5;
try {
dos.write(bytes);//發給客戶端
} catch (IOException e) {
e.printStackTrace();
System.out.println("發送包頭失敗");
}
try{
byte[] bytes1=new byte[1024];//發送包體數據
while((length=fis.read(bytes1, 0,bytes1.length))!=-1){
dos.write(bytes1,0,bytes1.length);
dos.flush();
}
}catch(Exception e){
e.printStackTrace();
System.out.println("發送文件包體數據失敗");
}
}
private static void writestring(DataOutputStream dos) {
// TODO Auto-generated method stub
String string="sending";
byte[] bytes=new byte[2];//同理發送字元串的包頭
bytes[0]=0;
bytes[1]=5;
try {
dos.write(bytes);
} catch (IOException e) {
e.printStackTrace();
System.out.println("發送包頭失敗");
}
try {
byte[] bytes1=new byte[1024];//發送字元串的包體數據
bytes1=string.getBytes();
dos.write(bytes1);
} catch (IOException e1) {
e1.printStackTrace();
System.out.println("發送字元包體數據失敗");
}
}
}

客戶端:
try{
s=new Socket("192.168.1.106",45);
Log.d(TAG, "run:2222222222222");
is=s.getInputStream();
dis=new DataInputStream(is);
new Thread(){
@Override
public void run(){
super.run();
try{
dis = new DataInputStream(s.getInputStream());
Log.d(TAG, "33333333333333");
byte[] bytes=new byte[2];
dis.read(bytes);
if(bytes[0]==0){
int a=bytes[1];
byte[] bytes1=new byte[a];
dis.readFully(bytes1);
String ssss=new String(bytes1);
Message msg=new Message();
msg.what=2;
msg.obj=ssss;
revhandler.sendMessage(msg);
}
else {
{
File file=new File("/storage/emulated/0/1/c.jpg");
Log.d(TAG,"run:2.55555555555555555555555");
fos=new FileOutputStream(file);
Log.d(TAG,"run:333333333333333333333");
inputByte = new byte[30];//接收數據
Message msg=new Message();
msg.what=0;
revhandler.sendMessage(msg);
Log.d(TAG,"run:44444444444444");
while((length = dis.read(inputByte, 0, inputByte.length)) != -1) {
Log.d(TAG,"44444444");
fos.write(inputByte,0,inputByte.length);
fos.flush();
}
msg = new Message();
msg.what=1;
revhandler.sendMessage(msg);
if(fos != null)
fos.close();
if(dis != null)
dis.close();
s.close();
}
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}.start();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
運行結果:
伺服器:
![V1LEZDB Z07VQ482$02HO%R.png
客戶端:

㈡ php的socket編程

socket_bind($socket,'127.0.0.1',9000);

伺服器端綁定IP指的是127.0.0.1,就是伺服器本機,監聽9000埠

㈢ 問一下,PHP中的Socket怎麼被動接收數據

首先是服務端的代碼:
<?php
$host = 'localhost';
$port = 4888;
set_time_limit(0);
$socket = socket_create(AF_INET, SOCK_STREAM, 0) or die("Could not create socket\n");
$result = socket_bind($socket, $host, $port) or die("Could not blind to port\n");
$result = socket_listen($socket, 3) or die("Could not set LIstener\n");

while($spawn = socket_accept($socket) or die("Could not readinput\n")){
$input = socket_read($spawn, 1024);
echo $input,"\n";
$input = '7636553:'.trim($input);

//client
$output = $input."\n";
socket_write($spawn, $output, strlen($output));
}
//kill
socket_close($spawn);
socket_close($socket);
echo "close\n";

?>

客戶端的代碼:
<?php
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
$connection = socket_connect($socket, 'localhost',4888) or die("Could not connect\n");

echo 'Write to Socket',"\n";
if(!socket_write($socket, "some data")){
echo 'write failed',"\n";
}

//read respose from socket
while($buffer = socket_read($socket, 1024)){
echo 'Response: ',$buffer,"\n";
}
?>

先啟動伺服器端,再執行客戶端。然後,你就可以看見這個效果了。

㈣ php socket udp 通信

與設備發送數據的程序編寫人協調,在發送的數據前面添加一個標識設備ID的內容,這樣接收數據後從數據判斷設備號,而不是通過IP和PORT。

例如約定用兩位數表示設備ID,那麼設備01發送的數據是AAAAA修改為發送01AAAAA,收到數據後識別01為設備號,後面的AAAAA作為數據。

㈤ socket怎樣做到實時接收信息

1. 根據ERRNO和recv結果進行判斷在UNIX/LINUX下,非阻塞模式SOCKET可以採用recv+MSG_PEEK的方式進行判斷,其中MSG_PEEK保證了僅僅進行狀態判斷,而不影響數據接收對於主動關閉的SOCKET, recv返回-1,而且errno被置為9(#define EBADF 9 /* Bad file number */)或104 (#define ECONNRESET 104 /* Connection reset by peer */)對於被動關閉的SOCKET,recv返回0,而且errno被置為11(#define EWOULDBLOCK EAGAIN /* Operation would block */) 對正常的SOCKET, 如果有接收數據,則返回>0, 否則返回-1,而且errno被置為11(#define EWOULDBLOCK EAGAIN /* Operation would block */) 因此對於簡單的狀態判斷(不過多考慮異常情況): recv返回>0, 正常 返回-1,而且errno被置為11 正常 其它情況 關閉

㈥ 想問下php的socket的工作流程是什麼

PHP 使用Berkley的socket庫來創建它的連接。你可以知道socket只不過是一個數據結構。你使用這個socket數據結構去開始一個客戶端和伺服器之間的會話。這個伺服器是一直在監聽准備產生一個新的會話。當一個客戶端連接伺服器,它就打開伺服器正在進行監聽的一個埠進行會話。這時,伺服器端接受客戶端的連接請求,那麼就進行一次循環。現在這個客戶端就能夠發送信息到伺服器,伺服器也能發送信息給客戶端。
產生一個Socket,你需要三個變數:一個協議、一個socket類型和一個公共協議類型。產生一個socket有三種協議供選擇,繼續看下面的內容來獲取詳細的協議內容。
定義一個公共的協議類型是進行連接一個必不可少的元素。下面的表我們看看有那些公共的協議類型。

表一:協議
名字/常量 描述
AF_INET 這是大多數用來產生socket的協議,使用TCP或UDP來傳輸,用在IPv4的地址
AF_INET6 與上面類似,不過是來用在IPv6的地址
AF_UNIX 本地協議,使用在Unix和Linux系統上,它很少使用,一般都是當客戶端和伺服器在同一台及其上的時候使用
表二:Socket類型
名字/常量 描述
SOCK_STREAM 這個協議是按照順序的、可靠的、數據完整的基於位元組流的連接。這是一個使用最多的socket類型,這個socket是使用TCP來進行傳輸。
SOCK_DGRAM 這個協議是無連接的、固定長度的傳輸調用。該協議是不可靠的,使用UDP來進行它的連接。
SOCK_SEQPACKET 這個協議是雙線路的、可靠的連接,發送固定長度的數據包進行傳輸。必須把這個包完整的接受才能進行讀取。
SOCK_RAW 這個socket類型提供單一的網路訪問,這個socket類型使用ICMP公共協議。(ping、traceroute使用該協議)
SOCK_RDM 這個類型是很少使用的,在大部分的操作系統上沒有實現,它是提供給數據鏈路層使用,不保證數據包的順序

表三:公共協議
名字/常量 描述
ICMP 互聯網控制消息協議,主要使用在網關和主機上,用來檢查網路狀況和報告錯誤信息
UDP 用戶數據報文協議,它是一個無連接,不可靠的傳輸協議
TCP 傳輸控制協議,這是一個使用最多的可靠的公共協議,它能保證數據包能夠到達接受者那兒,如果在傳輸過程中發生錯誤,那麼它將重新發送出錯數據包。

現在你知道了產生一個socket的三個元素,那麼我們就在php中使用socket_create()函數來產生一個socket。這個 socket_create()函數需要三個參數:一個協議、一個socket類型、一個公共協議。socket_create()函數運行成功返回一個包含socket的資源類型,如果沒有成功則返回false。
Resourece socket_create(int protocol, int socketType, int commonProtocol);

現在你產生一個socket,然後呢?php提供了幾個操縱socket的函數。你能夠綁定socket到一個IP,監聽一個socket的通信,接受一個socket;現在我們來看一個例子,了解函數是如何產生、接受和監聽一個socket。

<?php
$commonProtocol = getprotobyname(「tcp」);
$socket = socket_create(AF_INET, SOCK_STREAM, $commonProtocol);
socket_bind($socket, 『localhost』, 1337);
socket_listen($socket);
// More socket functionality to come
?>

上面這個例子產生一個你自己的伺服器端。例子第一行,
$commonProtocol = getprotobyname(「tcp」);
使用公共協議名字來獲取一個協議類型。在這里使用的是TCP公共協議,如果你想使用UDP或者ICMP協議,那麼你應該把getprotobyname() 函數的參數改為「udp」或「icmp」。還有一個可選的辦法是不使用getprotobyname()函數而是指定SOL_TCP或SOL_UDP在 socket_create()函數中。
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
例子的第二行是產生一個socket並且返回一個socket資源的實例。在你有了一個socket資源的實例以後,你就必須把socket綁定到一個IP地址和某一個埠上。

㈦ socket發送大量數據時如何接收

只要是接收端 你都應該不停的等待消息 ,接受消息的那一段可以這樣寫 while(true) { try{ Thread.sleep(300);}catch(Excepion e){} //注意這里的inStream是DataInputStream 當然你也可以加以裝飾 String message= inStream.readUTF(); if(message!=null) { System.out.println("收到消息:"+message); } } 只有這樣才能不斷從發送端收到消息,這段代碼只是給你一個提示,有問題給我留言,通常為了程序的合理性 最好把這段代碼寫進一個線程裡面,這樣更合理

㈧ 本質就是websocket的客戶端,php Websocket 怎麼接收數據

流程:
監聽埠
接受連接
進行websocket握手
握手成功後的連接進行數據處理
返回響應數據 class WebsocketClient { private $_Socket = null; public function __construct($host, $port) { $this->_connect($host, $port); } public function __destruct() { $this->_disconnect(); } public function sendData($data) {我推薦你去後盾人上面看看裡面有很多關於這類php之類的教學視頻哦⊙∀⊙!,視頻講解高質量

㈨ socket 發送之後 如何接收 服務端發來的信息

客戶端不需要向伺服器端在某個埠監聽,你需要做的事自定義一個read消息函數。但伺服器有消息傳過來,就會非同步地調用這個函數進行接受,在這個函數里,定義一個位元組數組用來接收讀到的數據,方法用socket的函數。看你是什麼語言。c++與java都不同。

閱讀全文

與phpsocket如何接收網上廣播數據相關的資料

熱點內容
如何進行定位和目標市場選擇 瀏覽:657
銀行來款信息是怎麼回事 瀏覽:268
期貨交易的書是什麼書 瀏覽:331
金士頓總代理是哪裡 瀏覽:934
奶茶實體店技術培訓哪裡有 瀏覽:598
招團長美團事業部產品方向指什麼 瀏覽:210
網卡技術是什麼意思 瀏覽:42
強迫交易罪從犯拿了25萬判多少年 瀏覽:998
廣州代理公司需要什麼資質 瀏覽:850
108佛珠產品賣點可以有哪些 瀏覽:14
委託代理怎麼收案 瀏覽:623
市場調研應該搞清楚哪些內容 瀏覽:169
微信小商店的產品怎麼下架 瀏覽:558
微商代理費用怎麼收費 瀏覽:32
張庄二手汽車交易市場在哪裡 瀏覽:59
天貓交易平台怎麼取消舉報 瀏覽:32
產品集中化策略有哪些 瀏覽:448
加盟代理商如何開店 瀏覽:613
農產品直供配送有哪些 瀏覽:55
數據線可以接多少個燈珠 瀏覽:524