WEB开发网
开发学院WEB开发ASP PHP和C通过Socket通信--UDP篇 阅读

PHP和C通过Socket通信--UDP篇

 2008-12-18 10:36:52 来源:WEB开发网   
核心提示:/*server.c*/#include <sys/types.h>#include <sys/socket.h>#include <string.h>#include <stdio.h>#include <netinet/in.h>#include <

/*server.c*/
#include <sys/types.h>
#include <sys/socket.h>
#include <string.h>
#include <stdio.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <stdlib.h>
#include <unistd.h>
#include <errno.h>

main(){
   int sock;
   struct sockaddr_in server,client;
   int recvd,snd;
   int structlength;
   char * server_ip = "128.168.10.1";/*server ip address*/
   int port = 8888;
   char recvbuf[2000],sendbuf[2000];  

char str1[]="I have received:\n";

memset((char *)&server,0,sizeof(server));
   server.sin_family = AF_INET;
   server.sin_addr.s_addr = inet_addr(server_ip);
   server.sin_port = htons(port);

memset((char *)&client,0,sizeof(client));
   client.sin_family = AF_INET;
   client.sin_addr.s_addr = htonl(INADDR_ANY);
   client.sin_port = htons(port);
  
   if((sock = socket (AF_INET,SOCK_DGRAM,0)) < 0 ){
     PRintf("socket create error!\n");
     exit(1);
   }  
   structlength = sizeof(server);
   if( bind(sock,(struct sockaddr *) &server,structlength) < 0){
     printf("socket bind error!\n");
     perror("bind");
     exit(1);
   }

while(1){
     structlength = sizeof(client);  
      
     printf("waiting.......\n");
     recvd = recvfrom(sock,recvbuf,sizeof(recvbuf),0,
       (struct sockaddr *) & client,&structlength);
     if(recvd < 0){
       perror("recvfrom");
       exit(EXIT_FAILURE);  
     }
     else{
       printf("received:%s\n",recvbuf);
    
       memset(sendbuf,0,strlen(sendbuf));
       memcpy(sendbuf,str1,strlen(str1));
          
       snd = sendto(sock,sendbuf,strlen(str1),0,
       (struct sockaddr *) &client,structlength);

     if(snd < 0){
       perror("sendto");
       exit(1);
       }
       printf("sendok!\n");
     }     
   }    
   close(sock);
}
/*
gcc -o server server.c生成server程序,在服务器端运行./server
*/
/*client.php*/

<?php
$server_ip="128.168.10.1";
$port = 8888;
$sock=@socket_create(AF_INET,SOCK_DGRAM,0);

if(!$sock){
   echo "socket create failure";
}

if($buf=="")
   $buf="hello,how are you!\n";
if(!@socket_sendto($sock,$buf,strlen($buf),0,"128.168.10.1",8888)){
   echo "send error\n";
   socket_close($sock);
   exit();
}

$buf="";
$msg="";

if(!@socket_recvfrom($sock,$msg,256,0,&$server_ip,&$port)){
   echo "recvieve error!";
   socket_close($sock);
   exit();
}

echo trim($msg)."\n";
socket_close($sock);
?>
<form action="client.php" method="post">
<input type=text name=buf>
<input type=submit value="submit">
</form>

/*这个过程很简单,就是客户端提交一个信息,服务端接收,
并返回给客户端一个"接收到"的确认信息。
*/

Tags:PHP 通过 Socket

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接