用php語言實現tcp和udp服務和客戶端,能進行互相通訊php
/** * socket tcp服務器建立 * @param string $ip IP地址 * @param string $port 端口號 * @param string $send_msg 返回給客戶端的數據 * @param integer $recv_len 一次獲取的數據長度 * @return void void */ function socket_tcp_server($ip='0.0.0.0', $port='6000', $send_msg='hello word', $recv_len=1024) { $serv = socket_create(AF_INET, SOCK_STREAM, SOL_TCP) or exit(socket_last_error()); //建立 socket_bind($serv, $ip, $port) or exit(socket_last_error()); //綁定 socket_listen($serv,4) or exit(socket_last_error()); //監聽 while(true){ if ($cli = socket_accept($serv)) { //獲取客戶端鏈接 $data = ''; //接收數據 while($msg = socket_read($cli,$recv_len)){ $data .= $msg; if (strlen($msg)<$recv_len || stripos($msg,'exit')!==false || stripos($msg,"\n")!==false) break; //數據邊界處理 } //socket_getpeername($cli, $cli_addr, $cli_port); //獲取客戶端socket信息 socket_getsockname($cli, $cli_addr, $cli_port); //獲取客戶端socket信息 echo "CLI: data:{$data},from:{$cli_addr},port:{$cli_port}".PHP_EOL; //處理數據 socket_write($cli, $send_msg, strlen($send_msg)); //向客戶端發送數據 socket_close($cli); } else { usleep(1000); } die; } socket_close($serv); } //socket_tcp_server(); // 使用
/** * php socket tcp服務器建立 * @param string $ip IP地址 * @param string $port 端口號 * @param string $send_msg 返回給客戶端的數據 * @param integer $recv_len 一次獲取的數據長度 * @return void void */ function php_tcp_server($ip='0.0.0.0', $port='6000', $send_msg='hello word', $recv_len=1024) { $serv = stream_socket_server("tcp://{$ip}:{$port}", $errno, $error); //建立 $errno and exit($error); while(true){ if ($cli = stream_socket_accept($serv)) { //接收客戶端鏈接 $data = ''; while($msg = fread($cli, $recv_len)){ //讀取客戶端數據 $data .= $msg; if (strlen($msg)<$recv_len || stripos($msg,'exit')!==false || stripos($msg,"\n")!==false) break; //數據邊界處理 } $peer = stream_socket_get_name($cli, true); //獲取客戶端信息 echo "CLI: data:{$data},peer:{$peer}".PHP_EOL; fwrite($cli, $send_msg, strlen($send_msg)); //向客戶端發送數據 //stream_socket_shutdown($cli, STREAM_SHUT_WR); //關閉客戶端鏈接 fclose($cli); } else { usleep(1000); } } //stream_socket_shutdown($serv, STREAM_SHUT_WR); fcloe($serv); } //php_tcp_server();
/** * socket tcp客戶端 * @param string $ip IP地址 * @param string $port 端口號 * @param string $data 發送的數據 * @return string 傳遞過來的數據 */ function socket_tcp_client($ip='127.0.0.1', $port='6000', $data='hello word') { $cli = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); //建立 socket_connect($cli, $ip, $port); //連接 socket_write($cli, $data, strlen($data)); //發送數據 $msg = socket_read($cli, 1024); //讀取服務端數據 socket_close($cli); //關閉 return $msg; //處理數據 } //echo socket_tcp_client('127.0.0.1',6000,'nihao');
/** * php socket tcp客戶端 * @param string $ip IP地址 * @param string $port 端口號 * @param string $data 發送的數據 * @return string 傳遞過來的數據 */ function php_tcp_client($ip='127.0.0.1', $port='6000', $data='hello word') { $cli = stream_socket_client("tcp://{$ip}:{$port}", $errno, $error); $error and exit($error); fwrite($cli, $data, strlen($data)); $recv_data = ''; while($msg = fread($cli, 1024)){ $recv_data .= $msg; } stream_socket_shutdown($cli, STREAM_SHUT_WR); return $recv_data; } //echo php_tcp_client();
/** * socket udp服務器建立 * @param string $ip IP地址 * @param string $port 端口號 * @param string $send_msg 返回給客戶端的數據 * @param integer $recv_len 一次獲取的數據長度 * @return void void */ function socket_udp_server($ip='0.0.0.0', $port='6000', $send_msg='hello word', $recv_len=1024) { $serv = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP) or exit(socket_last_error()); socket_bind($serv, $ip, $port) or exit(socket_last_error()); while(true){ socket_recvfrom($serv, $data, $recv_len, 0, $from, $port); //獲取客戶端數據 data IP地址 from 端口號 port echo "CLI: data:{$data},from:{$from},port:{$port}".PHP_EOL; socket_sendto($serv, $send_msg, strlen($send_msg), 0, $from, $port); //向客戶端發送數據 } socket_close($serv); } //socket_udp_server('0.0.0.0',6001);
/** * php socket udp服務器建立 * @param string $ip IP地址 * @param string $port 端口號 * @param string $send_msg 返回給客戶端的數據 * @param integer $recv_len 一次獲取的數據長度 * @return void void */ function php_udp_server($ip='0.0.0.0', $port='6001', $send_msg='hello word', $recv_len=1024) { $serv = stream_socket_server("udp://{$ip}:{$port}", $errno, $error,STREAM_SERVER_BIND); $errno and exit($error); while(true){ $data = stream_socket_recvfrom($serv, 1024, 0, $peer); echo "CLI: data:{$data},peer:{$peer}".PHP_EOL; stream_socket_sendto($serv, $send_msg, 0, $peer); } stream_socket_shutdown($serv, STREAM_SHUT_WR); } //php_udp_server();
/** * socket udp客戶端 * @param string $ip IP地址 * @param string $port 端口號 * @param string $data 發送的數據 * @return string 傳遞過來的數據 */ function socket_udp_client($ip='127.0.0.1', $port='6000', $data='hello word') { $cli = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP) or exit(socket_last_error()); socket_sendto($cli, $data, strlen($data), 0, $ip, $port) or exit(socket_last_error()); //發送數據 socket_recvfrom($cli, $data, 1024, 0, $ip, $port) or exit(socket_last_error()); //獲取數據 socket_close($cli); return $data; } //echo socket_udp_client('127.0.0.1',6001);
/** * php socket udp客戶端 * @param string $ip IP地址 * @param string $port 端口號 * @param string $data 發送的數據 * @return string 傳遞過來的數據 */ function php_udp_client($ip='127.0.0.1', $port='6001', $data='hello word') { $cli = stream_socket_client("udp://{$ip}:{$port}", $errno, $error); $error and exit($error); fwrite($cli, $data); $data = fread($cli, 1024); //stream_socket_shutdown($cli, STREAM_SHUT_WR); fclose($cli); return $data; } //echo php_udp_client();