当前位置: 首页 > 后端技术 > PHP

用php写TCP和UDP

时间:2023-03-30 03:42:41 PHP

功能说明用php语言实现tcp和udp服务和客户端,可以互相通信、差错控制和发展大;主要用于文本、程序等可靠性高的数据传输。UDP:不可靠,传输大小限制在1472字节以内,无需建立连接,差错控制开销小;主要用于图像、声音、网络游戏、视频会议等对可靠性要求不高的业务传输。创建TCP服务计划1:使用socket方式/***sockettcp服务器创建*@paramstring$ipIP地址*@paramstring$port端口号*@paramstring$send_msg返回给客户端的数据*@paraminteger$recv_len获取一次数据的长度*@returnvoidvoid*/functionsocket_tcp_server($ip='0.0.0.0',$port='6000',$send_msg='helloword',$recv_len=1024){$serv=socket_create(AF_INET,SOCK_STREAM,SOL_TCP)orexit(socket_last_error());//创建socket_bind($serv,$ip,$port)或exit(socket_last_error());//绑定socket_listen($serv,4)或exit(socket_last_error());//Listenwhile(true){if($cli=socket_accept($serv)){//获取客户端连接$data='';//接收数据while($msg=socket_read($cli,$recv_len)){$data.=$msg;如果(strlen($msg)<$recv_len||stripos($msg,'exit')!==false||stripos($msg,"\n")!==false)中断;//数据边界处理}//socket_getpeername($cli,$cli_addr,$cli_port);//获取客户端套接字信息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);}死;}socket_close($serv);}//socket_tcp_server();//方案二:用stream_socket_server创建/***phpsockettcpserver*@paramstring$ipIP地址*@paramstring$port端口号*@paramstring$send_msg返回给客户端的数据*@paraminteger$recv_len一次获取的数据长度*@returnvoidvoid*/functionphp_tcp_server($ip='0.0.0.0',$port='6000',$send_msg='helloword',$recv_len=1024){$serv=stream_socket_server("tcp://{$ip}:{$port}",$errno,$error);//创建$errno并退出($error);while(true){if($cli=stream_socket_accept($serv)){//接收客户端连接$d阿塔='';while($msg=fread($cli,$recv_len)){//读取客户端数据$data.=$msg;如果(strlen($msg)<$recv_len||stripos($msg,'exit')!==false||stripos($msg,"\n")!==false)中断;//数据边界处理}$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();TCPClient方案一:socket模式/***sockettcpclient*@paramstring$ipIP地址*@paramstring$port端口号*@paramstring$datasentdata*@returnstringpasseddata*/functionsocket_tcp_client($ip='127.0.0.1',$port='6000',$data='helloword'){$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);//关闭返回$msg;//处理数据}//echosocket_tcp_client('127.0.0.1',6000,'nihao');方案二:stream_socket_client/***phpsockettcpclient*@paramstring$ipIP地址*@paramstring$port端口号*@paramstring$data发送数据*@returnstring传递数据*/functionphp_tcp_client($ip='127.0.0.1',$port='6000',$data='helloword'){$cli=stream_socket_client("tcp://{$ip}:{$port}",$errno,$error);$错误并退出($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;}//echophp_tcp_client();UDP服务器方案一:使用socket方式/***socketudpserver创建*@paramstring$ipIP地址*@paramstring$port端口号*@paramstring$send_msg返回给客户端的数据*@paraminteger$recv_len一次获取的数据长度*@returnvoidvoid*/functionsocket_udp_server($ip='0.0.0.0',$port='6000',$send_msg='helloword',$recv_len=1024){$serv=socket_create(AF_INET,SOCK_DGRAM,SOL_UDP)orexit(socket_last_error());socket_bind($serv,$ip,$port)或exit(socket_last_error());while(true){socket_recvfrom($serv,$data,$recv_len,0,$from,$port);//从端口号获取客户端数据数据IP地址portecho"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);方案二:用stream_socket_server创建/***phpsocketudpserver*@paramstring$ipIP地址*@paramstring$port端口号*@paramstring$send_msg返回给客户端的数据*@paraminteger$recv_len的长度数据获取一次*@returnvoidvoid*/functionphp_udp_server($ip='0.0.0.0',$port='6001',$send_msg='helloword',$recv_len=1024){$serv=stream_socket_server("udp://{$ip}:{$port}",$errno,$error,STREAM_SERVER_BIND);$errno和退出($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();UDP客户端方案一:socket模式/***socketudpclient*@paramstring$ipIP地址*@paramstring$port端口号*@paramstring$data发送数据*@return字符串传递数据*/functionsocket_udp_client($ip='127.0.0.1',$port='6000',$data='helloword'){$cli=socket_create(AF_INET,SOCK_DGRAM,SOL_UDP)或退出(socket_last_error());socket_sendto($cli,$data,strlen($data),0,$ip,$port)或exit(socket_last_error());//发送数据socket_recvfrom($cli,$data,1024,0,$ip,$port)orexit(socket_last_error());//获取数据socket_close($cli);返回$data;}//echosocket_udp_client('127.0.0.1',6001);方案二:stream_socket_client/***phpsocketudpclient*@paramstring$ipIP地址*@paramstring$port端口号*@paramstring$data发送数据*@returnstring传递数据*/functionphp_udp_client($ip='127.0.0.1',$port='6001',$data='helloword'){$cli=stream_socket_client("udp://{$ip}:{$port}",$errno,$error);$错误并退出($错误);fwrite($cli,$data);$data=fread($cli,1024);//stream_socket_shutdown($cli,STREAM_SHUT_WR);fclose($cli);返回$data;}//echophp_udp_client();