Socket详细介绍

  什么叫socket 说白了socket一般 也称之为"套接字",用以叙述IP地址和端口 , 是一个通讯链的句柄。应用软件一般 根据“套接字”先服务器发出请求或是应答网络要求。

  在Internet上的服务器一般运作了好几个服务手机软件 , 另外出示集中化服务。每个服务都开启一个Socket , 并关联一个端口峡谷 , 不一样的端口相匹配于不一样的服务。

  tcp->http(能够用于建立网站或是有关服务)

  udp

 

Socket联接全过程

依据连接起动的方法及其当地套接字要联接的总体目标 , 套节字中间的联接全过程能够分成三个流程:

1、服务器监视:是服务器端套接字并不精准定位实际的手机客户端套接字 , 只是处在等候联接的情况 ,实时监控系统网络状态。

2、手机客户端要求:就是指由手机客户端的套接字明确提出联接要求,要联接的总体目标是服务器端套接字。因此,手机客户端的套接字务必最先眼熟它要联接的服务器的套接字,强调服务器套接字的详细地址和端口号 , 随后如同服务器端套接字明确提出联接要求。

3、联接确定:就是指当服务器端套接字监视到也就是说接受到手机客户端套接字的联接要求,他就回应手机客户端套接字的要求,创建一个新的进程,把服务器端套接字的叙述发送给手机客户端 , 一旦顾客确定了此叙述 , 联接就创建好啦。而服务器端套接字再次处在监视情况,再次接受别的手机客户端接字的连接要求。

一、接口测试:

  服务器ip:xxx.xxx.xxx.1

  手机客户端ip: xxx.xxx.xxx.2

二 检测全过程:

  手机客户端服务器将在该设备(xxx.xxx.xxx.1)根据socket传送数据到服务端(xxx.xxx.xxx.2)的socket服务器上,服务端接到手机客户端推送的数据信息后回到一些给手机客户端.

  <?php

  //获得tcp协议号吗.

  $tcp = getprotobyname("tcp");

  //创建server端socket , 建立并回到一个套接字,也称作一个通信连接点.一个典型性的数据连接由两个套接字组成 , 一个运作在手机客户端 , 另一个运作在服务器端.

  $socket = socket_create(AF_INFT , SOCK_STREAM , $tcp);

  //关联要监视的ip和端口 , 这儿关联的ip一定要写局域网ip , 写出127.0.0.1手机客户端将没法与服务器端提议联接.

  socket_bind($socket , 'xxx.xxx.xxx.1' , 10008);

  //监视端口

  socket_listen($socket);

  //复位一个数据信息 , 和手机客户端通讯

  $buffer = "connect";

  while(true){

    //接纳手机客户端要求回来的yigesocket联接

    $connection = socket-accept($scoket);

    if(!connection){

      echo "connect faild";

    } else {

    echo "Socket connected \n";

    //向顾客传送一个信息内容数据信息

   if($buffer != ""){

    echo "send data to client\n";

    socket_write($connection , $buffer , "\n");

    echo "Wrote to socket\n";    

} else {

    echo "no data in the buffer\n";

}   

  //从手机客户端获得得的数据信息

  while($data = $socket_read($connection , 1024 , PHP_NORMAL_READ)){

  printf("Buffer:".$data.'\n');

  //获得信息内容给手机客户端一个意见反馈 ,Thank you client , you data is Received success发送给手机客户端的答复信息内容.

  socket-wirte($coennection , "Thank you client , you data is Received success \n");

}

}

//关掉sockket

socket_close($connection);

printf("Closed the socket\n");

  

  }

?>

 

四 手机客户端文档內容:

 <?php

  //创建手机客户端的socket联接

  $socket = se);

  //联接服务器端socket

  $connection = socket_connect($socket , 'xxx.xxx.xxx.1' , 10008);

  //规定发送至服务端信息内容.

  $send_data = "This data will Send to server!";

  //手机客户端去联接服务端并接纳服务端回到的数据信息 , 假如回到的个人信息保护not connect就提醒不可以联接.

  while($buffer = @socket_read($socket , 1024,PHP_NORMAL_READ)){

    if(preg_match("/not connect/" , $buffer)){

    echo "don't connect\n";

    break;

  } else {

  //服务端传出的信息内容

  echo "Buffer Data: ".$buffer .'\n';

  echo "Writing to Socket\n";

  //将顾客的信息内容写到安全通道中 , 发送给服务器端

  if(!socket_write($socket , "$send_data\n")){

     echo "Write failed\n";

  }

  //服务器端接到信息内容后 , 手机客户端接纳服务端发送给手机客户端的答复信息内容.

  while($buffer = socket_read($socket , 1024 , PHP_NORMAL_READ)){

    echo "send to server: $send-data\n response from server was:".$buffer."\n";

  }

  }

  }

?>

 

五、在服务端socket服务起动过程。

#/usr/local/php/bin/php -a/home/server.php

Interactive mode enable 互动交流方式起动

 

六、服务端起动后查询起动的过程及端口

#netstat -tnlp |grep 10008

tcp   0  0 192.168.13:10008  0.0.0.0:*  LISTEN

28892/php

 

七、在手机客户端(192.168.1.2)上实行传送

#/usr/local/php/bin/php -a client.php

Interactive mode enabled

八、返回服务器端上查询接纳到的信息内容。

#/usr/local/php/bin/php -a /home/server.php

Interactive mode enabled

 

Socket connected

send data client

Wrote to socket

Buffer:This data will Send to server!

9、参考文献

socket_create()涵数必须三个主要参数:一个协议书、一个socket种类、一个公共性协议书。socket_create()涵数运作取得成功回到一个包括socket的资源 , 要是没有取得成功则回到false.

 

Socket涵数

涵数名  叙述

socket_accept()  接纳一个Socket联接

socket_bind()  basocket关联在哟个IP地址和端口上

socket_close()  关掉一个socket資源

socket_connect()  刚开始一个socket联接

socket_create()  造成一个socket , 等同于造成一个socket的算法设计

socket_read()  载入特定长短的数据信息

socket_readv()  载入从分散化/汇聚数字能量数组回来的数据信息

socket_send()  这一涵数传送数据到已连接的socket

sockt_write()  写数据信息到socket缓存文件

socket_write()  写数据信息到分散化/汇聚数字能量数组