本文梳理一个基础的java TCP消息通信,构造一个简单的Packet进行传输,代码如下:

  • Packet
public class Packet {private String attribute;public Packet(String attr){this.attribute = attr;}public String getAttribute() {return attribute;}public void setAttribute(String attribute) {this.attribute = attribute;}
}

  • 服务器端代码
public class App {private static final int PORT = 4000;public static void main(String[] args) throws IOException {ServerSocket listen = new ServerSocket(PORT);Socket          client = null;while(true){client = listen.accept();new Thread(new ServerThread(client)).start();}}
}

public class ServerThread implements Runnable{private static final int BUFSIZE  =1024;private Socket client = null;public ServerThread(Socket client){this.client = client;}@Overridepublic void run() {try {InputStream in      = client.getInputStream();OutputStream out = client.getOutputStream();byte[] buffer = new byte[BUFSIZE];while (in.read(buffer) != -1) {//判断包头if(buffer[0] == 0x01 && buffer[1] == 0x02){byte[] tmp = new byte[BUFSIZE];int index = 0;for(int i = 2; i < buffer.length; i++){tmp[index++] = buffer[i];}Packet packet = new Packet(new String(tmp,"GB2312"));System.out.println(packet.getAttribute());}else{System.out.println("消息格式不正确");}}out.close();in.close();} catch (IOException e) {e.printStackTrace();}    }
}

  • 客户端代码
public class App {private static final int PORT = 4000;private static final int BUFSIZE  =1024;public static void main(String[] args) throws IOException {Socket client = new Socket("127.0.0.1", PORT);InputStream in      = client.getInputStream();OutputStream out = client.getOutputStream();Packet packet = new Packet("类型参数2345");byte[] output = new byte[BUFSIZE];output[0] = 0x01;output[1] = 0x02;int index = 2;//若增加包长度字段,则可实现packet的分包、组包byte[] tmp1 = packet.getAttribute().getBytes();for(int i= 0; i < tmp1.length; i++){output[index++] = tmp1[i];}out.write(output);byte[] buffer = new byte[BUFSIZE];while (in.read(buffer) != -1) {  System.out.println(new String(buffer, "GB2312"));}out.close();in.close();client.close();}
}

转载于:https://www.cnblogs.com/Fredric-2013/p/4580688.html

java 网络(socket)相关推荐

  1. Java 网络 socket 编程

    使用套接字实现基于 TCP 协议的服务器和客户机程序 依据 TCP 协议,在 C/S 架构的通讯过程中,客户端和服务器的 Socket 动作如下: 客户端: 1.用服务器的 IP 地址和端口号实例化 ...

  2. java 半双工_(3)java网络socket通信---半双工、全双工

    (3)java网络---半双工.全双工 1.半双工 1.1半双工原理:半双工即Half duplex Communication,是指在通信过程的任意时刻,信息既可由A传到B,又能由B传A,但只能有一 ...

  3. Java网络编程——9.服务器Socket

    2019独角兽企业重金招聘Python工程师标准>>> 前一章从客户端的角度讨论了Socket,客户端就是向监听连接的服务器打开一个Socket的程序,不过如果不能与服务器对话,客户 ...

  4. 浅谈Java网络编程之Socket (2)

    <浅谈Java网络编程之Socket (1)>中我们已经和大家说到客户端的网络编程,下面和大家分享的是服务器的实现代码. import java.net.*; import java.io ...

  5. java网络编程,通过TCP,Socket实现多对一的局域网聊天室

    java网络编程,通过TCP,Socket实现多对一的局域网聊天室 可以实现多个客户端连接服务器,服务器接收到信息就会把信息广播到所有的客户端 这是服务器端的代码 View Code import j ...

  6. java网络编程之Socket编程

    概念 网络编程分为BIO(传统IO).NIO.AIO.Socket编程属于BIO这种传统IO. InetAddress java.net.InetAddress是JAVA中管理IP地址的类,常用 pu ...

  7. JAVA网络编程之Socket

    Socket网络编成是一种较为底层的网络数据传输,很多语言都支持. 本例是根据菜鸟教程中的Java网络编程而写. 详细内容参考请参考:http://www.runoob.com/java/java-n ...

  8. 浅谈Java网络编程之Socket (1)

    和大家一起分享的是Java网络编程之Socket.在Java中Socket可以理解为客户端或者服务器端的一个特殊的对象,这个对象有两个关键的方法,一个是getInputStream方法,另一个是get ...

  9. 【Java】Socket网络编程解读与实战

    Socket原理 Socket原理 <Socket 到底是什么> Socket--套接字 是网络应用程序编程的接口和一种机制 用套接字中的相关函数来建立连接和完成通信 Socket可以看成 ...

  10. JAVA 网络编程 Socket 详细说明,实现客户端和服务端相互推送消息

    客户端代码: package com.lcx.socket;import java.io.BufferedReader; import java.io.BufferedWriter; import j ...

最新文章

  1. 修复.NET的HttpClient
  2. jquery.mobile手机网页简要
  3. You Need This One Skill to Succeed in IT--reference
  4. 白话Elasticsearch26-深度探秘搜索技术之function_score自定义相关度分数算法
  5. 从运维域看 Serverless 真的就是万能银弹吗?
  6. cmake Debug模式和Release模式
  7. 5000字干货原创 | APP版本迭代如何避免踩坑?
  8. (补)20200328:两两交换链表中的节点(leetcode24)
  9. 顺时针90°旋转矩阵
  10. Linux之如何启动tomcat服务
  11. 大数据之路-阅读笔记
  12. 美国3月通胀见顶了吗?
  13. Unity 通过修改图片透明度实现淡出效果
  14. MSP430学习笔记(一)--从点灯说起
  15. Flash-制作空心文字
  16. i春秋《从0到1:CTFer成长之路》通关WP
  17. 序列化和反序列化 加上json数据流转换
  18. php 共享缓存之yac 快来替换掉APCU memcache
  19. H5页面上传图片控件
  20. Bootstrap中jumbotron属性

热门文章

  1. 两个坐标系进行了缩放平移后的变换关系
  2. 10.2 运算符重载函数作为类成员函数和友元函数
  3. opencv 其他形态学变换
  4. 计算机原理解读图,详细讲解仪器仪表测试系统,结构原理图拿走不谢
  5. 【量化投资】策略五(聚宽)
  6. 讲讲排序(C++描述)
  7. Z变换(2020.10.21)
  8. 3.Lasso线性模型
  9. 基于 Ubuntu 系统安装 CUDA 和 cuDNN
  10. c# 说说开发通用通信库,尤其是分布式服务的通信