这几天有一个需求,需要用php通过socket通信的方式调用java的服务。但开发过程中总是出现php socket客户端出现连接被中断的情况,同时java socket服务器端实际已经正常接收到php socket传递过来的数据,但是服务器端无法回写给php socket客户端。而用java socket客户端调用时一切正常。下面分别列出两边的关键代码。

php客户端

  1. $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
  2. //设置超时时间为1秒
  3. socket_set_option($socket,SOL_SOCKET,SO_RCVTIMEO,array("sec"=>1, "usec"=>0 ) );
  4. $connection = socket_connect($socket, '127.0.0.1', 10008);
  5. if($connection<0){
  6. echo "can't connect";
  7. return;
  8. }
  9. $msg = iconv("utf-8","gbk","测试测试");;
  10. socket_write($socket,$msg,strlen($msg));
  11. $result = socket_read($socket,2048,PHP_NORMAL_READ);
  12. socket_close($socket);

java服务器端

  1. while(true){
  2. try {
  3. Socket s=ss.accept(); //这里的ss是已经初始化好的ServerSocket对象
  4. if(null!=s){
  5. BufferedReader in = new BufferedReader(new InputStreamReader(s.getInputStream()));
  6. PrintWriter out = new PrintWriter(s.getOutputStream(),true);
  7. String ininfo = in.readLine();
  8. System.out.println(info);
  9. in.close();
  10. out.close();
  11. s.close();
  12. }
  13. } catch (IOException e) {
  14. e.printStackTrace();
  15. }
  16. }

调用php客户端时出现的错误提示

Warning: socket_read() [function.socket-read]: unable to read from socket [0]

问题原因:由于java服务器接收时,使用的是readline,即收到了\n的标记时才表示接受完成,而php发送数据时,没有加\n,表示接收一直没有完成,因此一直阻塞(java客户端一般发送数据时使用println(),默认带了\n,所以java客户端正常运行),无法向客户端回写数据。而如果客户端设置了连接超时时间,则出现服务器端主动断开连接的错误。

解决方法:在php socket客户端要发送的数据末尾加上"\n"即可解决问题。

参考资料:http://stackoverflow.com/questions/11488925/php-tcp-connection-to-java-server-hangs-on-socket-read

转载于:https://blog.51cto.com/qibian/990605

关于php socket客户端连接java socket服务器端,出现连接中断的问题。相关推荐

  1. socket 客户端连接池实现

    本文参考:http://cache.baidu.com/c?m=9f65cb4a8c8507ed4fece76310508a24420597634b86914323c3933fcf331d5c017b ...

  2. 案例驱动python编程入门-python监听socket客户端连接(驱动串口屏幕)

    [实例简介] [实例截图] [核心代码] import socket import os import sys import struct def socket_service_data(): try ...

  3. node --- 创建一个Socket客户端连接到服务器

    描述: net.createrServer().listen(60300) 监听客户端访问 net.connect({ port: 60300 }) 访问服务器 服务器: 一个很简单的监听文件改变的服 ...

  4. java起socket监听,java socket 监听示例,javasocket,java socket监

    java socket 监听示例,javasocket,java socket监 java socket监听示例: socket监听需要使用SocketServer类,如下代码:package cn. ...

  5. java与c++ socket通信_C++ socket 客户端与JAVA socket 服务端通信汗血宝马

    C++ socket 连接java 服务如果发送 packHeadLength+消息体 java 客户端代码 Socket socket = new Socket("127.0.0.1&qu ...

  6. SAP的程序用客户端连接正常,用C#连接死活连不上问题的解决

    客户打电话过来,我们的程序不能正常运行了,晕倒啊,以前好好的程序怎么会不正常呢? 在我电脑上测试运行正常,在别人的电脑上运行不正常,在另一个同事的电脑上运行也正常. 在客户的电脑上进行了很多测试,就2 ...

  7. 客户端连接mysql 自动断开_MySql连接空闲8小时自动断开的原因及连接池配置方法...

    数据库连接超时时间查询 非交互式超时时间,如 JDBC 程序 show global variables like 'wait_timeout'; 交互式超时时间,如数据库工具 show global ...

  8. 客户端连接服务器,配置出错“连接超时”或者“无监听程序”解决方法

    这两天在进行Oracle的客户端配置,服务器OS为Windows XP 64,客户端OS为Win7 64,oracle版本为11.2. 先说下服务器端自己的疑惑,由于自己是新手,很多都不明白是怎么个回 ...

  9. nginx服务器远程无法访问,客户端连接Nginx偶尔提示无法连接到远程服务器

    nginx的日志没有记录到相关连接信息 http配置: client_header_timeout 3m; client_body_timeout 3m; send_timeout 3m; clien ...

最新文章

  1. 计算机二级应用题改卷,全国计算机等级考试二级Python语言程序设计模拟试卷B卷综合应用题-Go语言中文社区...
  2. 数据格式、类型系统与展示
  3. 【Python学习系列十一】Python实现决策树实现C4.5(信息增益率)
  4. 程序员深夜啪啪啪真相,看完笑翻!
  5. how is configuration data loaded for framework preloadLibCss
  6. yii1.0性能调优之改善并发数
  7. java 类之间转换,java中类对象之间的类型转换
  8. 搜matlab代码的网站,LTE小区搜索matlab仿真
  9. 用WebView加载本地图片的方法
  10. 软件从“出生”到“消亡”的过程称为_软件测试面试最常问到的101个面试问题,你中枪了吗?(一)...
  11. android app 获得root 权限管理,Android获取超级管理员权限的实现
  12. 优秀的流程图是如何制作的?简单的教程讲解
  13. 用python开发的运维管理系统_python运维开发常用模块(一)psutil
  14. 【转载】经典SQL语句大全(绝对的经典)
  15. 五邑大学计算机学院院长,五邑大学计算机学院研究生导师介绍曹彩凤
  16. 技术之路也要懂得理财-------林左鸣:建设军工强国的5条锦囊妙计
  17. 《Python与硬件项目案例》— 基于Python与指纹模块AS608的指纹识别签到考勤系统(下篇)(期末大作业、课程设计、毕业设计、结课项目)
  18. 【数据压缩】C语言实现bmp图片序列生成yuv视频
  19. Hbuildx 使用vue打包的App实现微信支付功能
  20. bga bond焊盘 wire_封装模式: FC-BGA VS. WireBond ,谁是封装工艺中的真英雄?(图)

热门文章

  1. php生成唯一的加密串,hashids.php-master整数生成唯一字符串的加密库
  2. arraylist 初始化_Java二维数组和动态数组ArrayList 类
  3. hpe服务器有哪些型号,HPE ProLiant DL80 Gen9 服务器 - 惠普服务器配置参数
  4. 剑指Spring源码(一)
  5. 小程序笔记一:基础设置
  6. SpringMVC - SpringMVC的概述
  7. php中获取网站访客来源的关键词方法
  8. 使用pygame制作一个简单的游戏
  9. hdoj 2544 最短路
  10. JS 截取字符串及字符与数字转换