php中socket的使用
php中使用socket在服务器端主要使用这么几个函数:
1/$socket = socket_create(AF_INET,SOCK_STREAM,SOL_TCP)创建一个socket
2/socket_bind($socket,$host,$ip)绑定
当用socket()函数创建套接字以后,套接字在名称空间(网络地址族)中存在,但没有任何地址给它赋值。bind()把用addr指定的地址赋值给用文件描述符代表的套接字sockfd。addrlen指定了以addr所指向的地址结构体的字节长度。一般来说,该操作称为“给套接字命名”。
通常,在一个SOCK_STREAM套接字接收连接之前,必须通过bind()函数用本地地址为套接字命名。
3/socket_listen($sock,4)监听
listen函数使用主动连接套接口变为被连接套接口,使得一个进程可以接受其它进程的请求,从而成为一个服务器进程。在TCP服务器编程中listen函数把进程变为一个服务器,并指定相应的套接字变为被动连接。 listen函数在一般在调用bind之后-调用accept之前调用
4/socket_accept($sock)
accept()系统调用主要用在基于连接的套接字类型,比如SOCK_STREAM和SOCK_SEQPACKET。它提取出所监听套接字的等待连接队列中第一个连接请求,创建一个新的套接字,并返回指向该套接字的文件描述符。新建立的套接字不在监听状态,原来所监听的套接字也不受该系统调用的影响。
<?php
$ip = '127.0.0.1';
$port = 1919;
set_time_limit(0);
if(($sock = socket_create(AF_INET,SOCK_STREAM,SOL_TCP))<0){
echo 'socket_create()失败的原因是:'.socket_strerror($sock).'\n';
}
if(($ret = socket_bind($sock,$ip,$port))<0){
echo 'socket_bind()失败的原因是:'.socket_strerror($ret).'\n';
}
if(($lis = socket_listen($sock,4))<0){
echo 'socket_listen()失败的原因是:'.socket_strerror($lis).'\n';
}
$count = 0;
do{
if(($msgsock = socket_accept($sock))<0){
echo "socket_accept() failed:reason:".socket_strerror($msgsock).'\n';
break;
}else{
$msg = "测试成功!\n";
socket_write($msgsock,$msg,strlen($msg));
echo "测试成功了啊\n";
$buf = socket_read($msgsock,8192);
$talkback = "收到的信息:$buf\n";
echo $talkback;
if(++$count >= 5){
break;
};
}
socket_close($msgsock);
}while(true);
socket_close($sock);
客户端:
/**
* @socket_create 创建
* @socket_connect 连接
* @socket_write 发送
* @socket_read 读取
* @socket_close 关闭
*/
<?php
error_reporting(E_ALL);
set_time_limit(0);
echo "<h2>TCP/IP Connection</h2>\n";
$port = 1919;
$ip = '127.0.0.1';
$socket = socket_create(AF_INET,SOCK_STREAM,SOL_TCP);
if($socket <0){
echo "socket创建失败:失败原因:".socket_strerror($socket)."\n";
}else{
echo "ok.\n";
}
echo "试图连接'$ip'端口'$port'...";
$result = socket_connect($socket,$ip,$port);
if($result < 0){
echo 'socket连接失败:失败原因:'.socket_strerror($result)."\n";
}else{
echo "连接OK\n";
}
$in = "Ho\r\n"."first blood \r\n";
$out = '';
if(!socket_write($socket,$in,strlen($in))){
echo 'socket数据发送失败:原因是:'.socket_strerror($socket)."\n";
}else{
echo "发送内容成功!\n";
echo "发送的内容为:<font color='red'>$in</font><br>";
}
while($out == socket_read($socket, 8192)){
echo "接收服务器回传信息成功!\n";
echo "接受的内容为:".$out;
break;
}
echo "关闭socket...\n";
socket_close($socket);
echo "关闭ok\n";
php中socket的使用的更多相关文章
- linux中socket的理解
对linux中socket的理解 一.socket 一般来说socket有一个别名也叫做套接字. socket起源于Unix,都可以用“打开open –> 读写write/read –> ...
- 操作系统底层原理与Python中socket解读
目录 操作系统底层原理 网络通信原理 网络基础架构 局域网与交换机/网络常见术语 OSI七层协议 TCP/IP五层模型讲解 Python中Socket模块解读 TCP协议和UDP协议 操作系统底层原理 ...
- python中socket模块详解
socket模块简介 网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket.socket通常被叫做"套接字",用于描述IP地址和端口,是一个通信 ...
- Linux查看系统中socket状态
当我们打开的socket数量很多时,netstat就会变得慢了,有什么办法可以快速查看系统中socket状态? IPv4: $ cat /proc/net/sockstat sockets: used ...
- (转)python标准库中socket模块详解
python标准库中socket模块详解 socket模块简介 原文:http://www.lybbn.cn/data/datas.php?yw=71 网络上的两个程序通过一个双向的通信连接实现数据的 ...
- python中Socket的使用
说明 前一段时间学习python网络编程,完成简单的通过python实现网络通信的功能.现在,将python中Socket 通信的基本实现过程做一个记录备份. Socket通信 python 中的so ...
- 第一篇 网站基础知识 第4章 Java中Socket的用法
第4章 Java中Socket的用法 4.1 普通Socket的用法 Java中的网络通信是通过Socket实现的,Socket分为ServetSocket和Socket两大类,ServetSocke ...
- TCP/IP网络编程中socket的行为
一. read/write的语义:为什么会阻塞? 先从write说起: #include <unistd.h>ssize_t write(int fd, const void *buf, ...
- 浅谈TCP/IP网络编程中socket的行为
我认为,想要熟练掌握Linux下的TCP/IP网络编程,至少有三个层面的知识需要熟悉: 1. TCP/IP协议(如连接的建立和终止.重传和确认.滑动窗口和拥塞控制等等) 2. Socket I/O系统 ...
- linux中socket的理解---4
一.socket 一般来说socket有一个别名也叫做套接字. socket起源于Unix,都可以用“打 开open –> 读写write/read –> 关闭close”模式来操作.So ...
随机推荐
- iOS将Unity导出的Xcode工程导入到另一个Xcode项目, 及常见报错的解决方法
demo下载地址 http://pan.baidu.com/s/1pLcpKpl 1.Unity导出工程时设置bundle id要与项目一致 2.修改bit code为NO 3.删除Main.stor ...
- 让WebRTC支持H264编解码
近期实验了下怎样让WebRTC支持H264编码.记录下,供有须要的人參考. 说明一下,我是在 Ubuntu Server 14.04 下编译的 WebRTC ,使用 native(C++) api 开 ...
- GUN C中的错误报告
在C语言中,很多库函数在调用失败时都会返回特定的值.比如返回-1,空指针,EOF等.但是这些值仅仅表示的调用失败,并未给出详细的错误信息.如果想查看详细的错误内容,就要去查看errno的错误代码,er ...
- 【BZOJ3720】Gty的妹子树 块状树
[BZOJ3720]Gty的妹子树 我曾在弦歌之中听过你,檀板声碎,半出折子戏.舞榭歌台被风吹去,岁月深处尚有余音一缕……Gty神(xian)犇(chong)从来不缺妹子……他来到了一棵妹子树下,发现 ...
- DP(正解完全背包+容斥)
DP Time Limit:10000MS Memory Limit:165888KB 64bit IO Format:%lld & %llu Submit Status De ...
- EF之POCO应用系列2——复杂类型
在.NET开发中,EF4以前的版本以及LINQ TO SQL都不支持complex数据类型,EF4终于支持complex类型的数据了,这意味着微软的EF框架朝领域驱动方面又迈了一大步. 复杂的数据类型 ...
- 洛谷2704 [NOI2001]炮兵阵地
题目戳这里 Solution 状压DP很好的入门题,用熟练位运算貌似也没那么难. 首先分析一下题目: 看见n=100,m=10,立马就想到了状压,看起来也像DP,所以我们还是采用行号为阶段的状压DP. ...
- Python字典的入门案例
查看python版本: [root@localhost ~]# python -V Python 2.7.5 1.基本的字典操作 案例1:简单电话本实现 [root@localhost ~]# vim ...
- C#BackgroundWorker组件
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...
- vs2008 发布网站时丢失文件问题
右键指定的文件->属性, 将生成操作更改成为"内容"就可以了.