首先编辑php.ini, 打开extension=php_sockets.dll, 修改完成之后重启apache
可以加下如下代码判断是否开启php_sockets
1 2 3 4 5 6 7 8 |
if(extension_loaded('sockets')) { echo "已开启"; } else { echo "未开启"; } |
服务端代码 server.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
<?php set_time_limit(0); $host="localhost"; $port=8080; //创建一个连接 $socket=socket_create(AF_INET,SOCK_STREAM,SOL_TCP)or die("cannot create socket\n"); //绑定socket到端口 $result=socket_bind($socket,$host,$port) or die("cannot bind port to socket\n"); //开始监听这个端口 $result=socket_listen($socket,4) or die("could not set up socket listen\n"); //接受连接,另一个socket来处理通信 $msgsock=socket_accept($socket) or die("cannot accept incoming connection\n"); if($msgsock) { echo "connect"; echo date("Y-m-d H:i:s D a"); echo "\n"; } //读取客户端发送过来的信息 $input=socket_read($msgsock,1024) or die("cannot read input\n"); $input=trim($input); echo "recv:$input\n"; //发送数据到客户端 $output="output\n"; socket_write($msgsock,$output,strlen($output)) or die("cannot write"); //关闭socket连接 socket_close($msgsock); socket_close($socket); ?> |
VC客户端代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
// phpsocket.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include <windows.h> #pragma comment(lib,"ws2_32.lib") int _tmain(int argc, _TCHAR* argv[]) { //初始化套接字版本 WSAData wsaData; WSAStartup(MAKEWORD(2,2),&wsaData); //创建Socket SOCKET Socket_Server; Socket_Server = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP); if (Socket_Server == INVALID_SOCKET) { printf("Socket error"); return 0; } //初始化地址 sockaddr_in ClientAddr; ClientAddr.sin_family = AF_INET; ClientAddr.sin_port = htons(8080); ClientAddr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1"); //循环连接 while (true) { //连接 if (connect(Socket_Server,(LPSOCKADDR)&ClientAddr,sizeof(ClientAddr)) == SOCKET_ERROR) { printf("connect error\n"); Sleep(3000); continue; } printf("连接成功"); break; } //发送 if (send(Socket_Server,"online",sizeof("online"),0) == SOCKET_ERROR) { printf("send error"); return 0; } char revData[1024] = {0}; int ret = recv(Socket_Server,revData,1024,0); if (ret > 0) { MessageBoxA(0,revData,0,0); } //关闭Socket closesocket(Socket_Server); WSACleanup(); return 0; } |
-----------------------------------------------------------------------------
另外附上PHP客户端代码供参考
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
<?php set_time_limit(0); $host="localhost"; $port=8080; //创建一个socket $socket=socket_create(AF_INET,SOCK_STREAM,SOL_TCP)or die("cannot create socket\n"); //连接 $conn=socket_connect($socket,$host,$port) or die("cannot connect server\n"); if($conn) { echo "connect ok\n"; } //发送数据 socket_write($socket,"online") or die("cannot write data\n"); //接收数据 $buffer=socket_read($socket,1024,PHP_NORMAL_READ); if($buffer) { echo "recv:".$buffer."\n"; } socket_close($socket); ? |
转载请注明:exchen's blog » phpsocket服务端和VC客户端通信实例