访问端:

 public static void main(String[] args) {
//        initSocket();testSocket();}public static void testSocket() {try {String host = "192.168.3.238";int port = 8801;if (!connectSocket(host, port)) {System.out.println("connect fail");return;}if (!sendData("test data".getBytes(StandardCharsets.UTF_8))) {return;}if (!readData()) {return;}System.out.println("return---" + returnData);} catch (Exception ex) {ex.printStackTrace();}}public static boolean connectSocket(String host, int port) {try {socket = new Socket();SocketAddress address = new InetSocketAddress(host, port);socket.connect(address);return true;} catch (Exception ex) {ex.printStackTrace();return false;}}private static boolean closeSocket() {if (!socket.isClosed()) {try {socket.close();return true;} catch (IOException e) {e.printStackTrace();return false;}}return true;}public static boolean sendData(byte[] data) {try {OutputStream out = socket.getOutputStream();out.write(("send data").getBytes(StandardCharsets.UTF_8));out.flush();} catch (Exception ex) {ex.printStackTrace();return false;}return true;}public static boolean readData() {try {int len = 0;byte[] data = new byte[128];InputStream in = socket.getInputStream();len = in.read(data);String instr = new String(data, 0, len);
//            System.out.println("return message" + instr);returnData = instr;return true;} catch (Exception ex) {ex.printStackTrace();return false;}}

服务端main:

public static void main(String[] args) {byte[] data = new byte[128];int len = 0;ServerSocket socket = null;try {socket = new ServerSocket(8801);System.out.println("socket 套接字创建成功,等待连接...");while (true) {Socket con = socket.accept();SocketListenThread s_thread = new SocketListenThread(con);s_thread.setSocket(con);s_thread.start();}} catch (IOException e) {e.printStackTrace();} finally {if (socket.isClosed()) {System.out.println("socket已经关闭");}}

服务端线程:

public class SocketListenThread extends Thread {/*** socket*/private Socket socket;@Overridepublic void run() {try {sleep(3000);int len = 0;s_in = socket.getInputStream();len = s_in.read(data);String in = new String(data, 0, len);System.out.println("接收消息" + in);if (socket.isClosed()) {System.out.println("socket已经关闭1");}s_ou = socket.getOutputStream();s_ou.write((in + "_a").getBytes(StandardCharsets.UTF_8));s_ou.flush();s_ou.close();} catch (Exception ex) {ex.printStackTrace();}}
}

说明:服务端会一直运行,等待接收访问,访问端每次访问都占用一个新的线程来处理当次访问

对于服务端和访问端,InputStream都为读数据内容,OutputSteam都为发送数据,在发送数据时,不要执行out.close();这样会将socket关闭。

每次读出的数据,都需要byte[]来接收,因为开始为128位,所有如果读的内容不足128,后面会出现乱码,需要截取对应的长度的数据,len = in.read(data);len即为数据真实长度,实际开发中可以自己指定长度。

java实现socket通讯相关推荐

  1. socket python 连接 java_linux 下 python 和 java, socket通讯问题。

    一个小程序,服务端terminal1里运行一个25*25的地图,给客户端传送24个字节的视野信息. 客户端terminal2里是agent,一个5*5的视野. 老师给的是java版的.客户端和服务端t ...

  2. 【JAVA】Socket通讯发送报文

    报文头为byte数组格式的报文长度 方法外设置静态变量,如下: public static int readSize = 1024*4; 通讯方法,如下: int length = message.g ...

  3. Java与C++Socket通讯注意

    2019独角兽企业重金招聘Python工程师标准>>> c++与java进行socket通信时注意事项 因为java发送的都是网络字节序(big-endium),而c++是主机字节序 ...

  4. java与 C++ 之间进行 SOCKET 通讯要点简要解析

    Endian定义: 在计算机系统体系结构中用来描述在多字节数中各个字节的存储顺序. big-endian也称高位在前.大端在前.是 计算机体系结构中一种描述多字节存储顺序的术语,在这种机制中最重要字节 ...

  5. as3 java 交互_求大佬用 Java 实现这段 AS3 的 socket 通讯功能

    最近在分析一个直播网站,初步分析后发现是在 swf 中用 socket 通讯返回的 flv 地址. 其中 Actionscript socket 通讯的关键代码如下: this._socket = n ...

  6. Socket网络通讯开发总结之:Java 与 C进行Socket通讯

    先交待一下业务应用背景: 服务端:移动交费系统:基于C语言的Unix系统 客户端:增值服务系统:基于Java的软件系统 通迅协议:采用TCP/IP协议,使用TCP以异步方式接入 数据传输:基于Sock ...

  7. socket java 服务器端_Java 简单的Socket通讯的服务器端实现

    最近学安卓开发,看到书上这个Socket通讯的实例,按照书上打的时候客户端一直连接不上,可能是网络问题或者虚拟机连接问题,所以就用控制台实现的客户端,这里是服务器端的.话不多说,直接贴代码 impor ...

  8. java socket通讯_Java socket通讯实现过程及问题解决

    这篇文章主要介绍了Java socket通讯实现过程及问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 本来是打算验证java socket是 ...

  9. java socket 卡住_Java socket通讯实现过程及问题解决

    这篇文章主要介绍了java socket通讯实现过程及问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 本来是打算验证java socket是 ...

最新文章

  1. 使用nexus来搭建Nuget私服
  2. linux和aix设置时间
  3. 网易云信流媒体服务端架构设计与实现
  4. linux 流量 脚本,linux 检测网络出入流量 当达到一定量时 自动执行另一个脚本。...
  5. 大火C4D元素,电商大促海报背景BANNER素材
  6. poj 2777 Count Color 基础线段树,带给的初学者噩梦!!!
  7. CentOS 6.5安装配置Nginx
  8. 54份运算放大器书籍、文档资料合集(54份 0.46G)
  9. python开发一个PC屏幕监控软件(2000块的道德底线)
  10. JAVA——算法训练 调和数列问题
  11. RTF转换为HTML格式(java)
  12. 乐符识别matlab,GitHub - Nuullll/music-synthesizer: Homework No.1 for summer course: MATLAB
  13. 【JVM】元空间与永久代区别
  14. Hue 集成Hive
  15. uTorrent 高级设置方法
  16. arduino交通信号灯
  17. 前端 JS实现彩票开奖走势图 连线
  18. 植物大战僵尸2android最新版,手机植物大战僵尸2高清版下载官方-植物大战僵尸2高清版 安卓版v2.4.8-PC6手游网...
  19. python支持复数类型以下什么说法是错误的_python测试开发面试题1
  20. 路由器、路由表及常用路由选择协议初识

热门文章

  1. linux命令行连接wifi RTL810xE PCI Express Fast Ethernet Controller 网卡
  2. 大一至大三在校期间公众号作品(部分)
  3. uniapp根据定位城市获取对应的天气
  4. 非稳态计算时间步和最大迭代数的设定(分享)
  5. 解读阿里云成功运营生态体系的两个关键密码:开放与双向赋能
  6. 前缀表达式、中缀表达式、后缀表达式的区别
  7. 51单片机数字电子钟设计(数电课设,含时间显示、校准、整点报时、闹钟功能)
  8. Navicat Premium 查看密码方案
  9. 免费给你的网站加速,全球访问速度杠杠的
  10. 基于STM32的无刷电机驱动板 无感/有感制作