本文梳理一个基础的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;
} @Override
public 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(); }
}

java 网络(socket)的更多相关文章

  1. java网络编程socket解析

    转载:http://www.blogjava.net/landon/archive/2013/07/02/401137.html Java网络编程精解笔记2:Socket详解 Socket用法详解 在 ...

  2. Java 网络编程(五) 使用TCP/IP的套接字(Socket)进行通信

    链接地址:http://www.cnblogs.com/mengdd/archive/2013/03/10/2952616.html 使用TCP/IP的套接字(Socket)进行通信 套接字Socke ...

  3. 【java】网络socket编程简单示例

    package 网络编程; import java.io.IOException; import java.io.PrintStream; import java.net.ServerSocket; ...

  4. JAVA之旅(三十二)——JAVA网络请求,IP地址,TCP/UDP通讯协议概述,Socket,UDP传输,多线程UDP聊天应用

    JAVA之旅(三十二)--JAVA网络请求,IP地址,TCP/UDP通讯协议概述,Socket,UDP传输,多线程UDP聊天应用 GUI写到一半电脑系统挂了,也就算了,最多GUI还有一个提示框和实例, ...

  5. Java基础知识➣网络Socket(六)

    概述 网络编程是指编写运行在多个设备(计算机)的程序,这些设备都通过网络连接起来. java.net 包中提供了两种常见的网络协议的支持: TCP:TCP 是传输控制协议的缩写,它保障了两个应用程序之 ...

  6. Java网络编程--套接字Socket

    一.套接字Socket IP地址标志Internet上的计算机,端口号标志正在计算机上运行的进程(程序). 端口号被规定为一个16位的0--65535之间的整数,其中,0--1023被预先定义的服务通 ...

  7. java网络编程ServerSocket类 和Socket类的常用构造方法及其方法

    Socket类Socket(InetAddress address, int port) 创建一个流套接字并将其连接到指定 IP 地址的指定端口号.Socket(String host, int po ...

  8. JAVA I/O(四)网络Socket和ServerSocket

    <Thinking in Enterprise Java>中第一章描述了用Socket和Channel的网络编程,核心即为Socket和Channel,本文简单讲述Socket的应用. S ...

  9. 如何使用socket进行java网络编程(三)

    本篇文章继续记录java网络通讯编程的学习.在本系列笔记的第一篇中曾经记录过一个项目中的程序,当时还处于项目早期,还未进入与第三方公司的联调阶段,笔者只是用java写了一个client程序模拟了一下第 ...

  10. 如何使用socket进行java网络编程(二)

    通过在如何使用socket进行java网络编程(一)中程序的编写,可以总结出一些常用的java socket编程的范例来. ServerSocket server = new ServerSocket ...

随机推荐

  1. C# 反转字符串

    using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace 实现字符 ...

  2. cassandra指定数据库路径

    参考 https://docs.datastax.com/en/cassandra/2.1/cassandra/configuration/configCassandra_yaml_r.html 我们 ...

  3. IIS配置excel 权限

    http://www.cnblogs.com/zhuxiaohui/archive/2013/10/16/3371637.html

  4. 用 eval() 转换 Json 对象时,为什么要加括号?

    var dataObj=eval("("+data+")");//转换为json对象   为什么 eval 这里,data 要用 "(".& ...

  5. 【Mail】JavaMail发送带附件的邮件(二)

    上一篇讲了使用JavaMail发送普通邮件([Mail]JavaMail介绍及发送邮件(一)),本例讲发送复杂的邮件(带有附件的邮件) 生成一封复杂的邮件 新建一个JavaWeb的Maven工程,引入 ...

  6. HDU Math Problems

    1576 const int mod = 9973; n = a - a / mod * mod; a / b = ans; ans * b = a = a / mod * mod + n; n = ...

  7. python 跨模块实现按照文件大小,日期实现日志分割,反转

    笔者的一个自动化测试平台项目,采用了python作为后端服务器语言.项目基于快速成型目的,写了一个极其简陋的日志记录功能,支持日志记录到文件和支持根据日志级别在终端打印不同颜色的log.但随着测试平台 ...

  8. JavaScript中对象的含义与this的指向

    JavaScript中的对象:无序属性的集合 -其属性可以包含基本值.对象或函数.对象就是一组没有顺序的值.我们可以吧JavaScript中的对象想象成键值对,其中值可以是数据和函数.对象的行为和特征 ...

  9. android studio 华为手机看不到具体的错误日志

    手机的开发人员选项打开了么,其中的 USB 调试打开了么?搞定他们并重新运行,是否能找到我们的日志?否,转到 2. 日志中是否有这样 could not disable core file gener ...

  10. LinkList(JAVA版,contain rear)

    //含有rear,尾插时时O(1)的复杂度package linearList;//凡是实现后插后删都比较容易,尽量向着这个方向转换public  class linearList {      cl ...