java 网络(socket)
本文梳理一个基础的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)的更多相关文章
- java网络编程socket解析
转载:http://www.blogjava.net/landon/archive/2013/07/02/401137.html Java网络编程精解笔记2:Socket详解 Socket用法详解 在 ...
- Java 网络编程(五) 使用TCP/IP的套接字(Socket)进行通信
链接地址:http://www.cnblogs.com/mengdd/archive/2013/03/10/2952616.html 使用TCP/IP的套接字(Socket)进行通信 套接字Socke ...
- 【java】网络socket编程简单示例
package 网络编程; import java.io.IOException; import java.io.PrintStream; import java.net.ServerSocket; ...
- JAVA之旅(三十二)——JAVA网络请求,IP地址,TCP/UDP通讯协议概述,Socket,UDP传输,多线程UDP聊天应用
JAVA之旅(三十二)--JAVA网络请求,IP地址,TCP/UDP通讯协议概述,Socket,UDP传输,多线程UDP聊天应用 GUI写到一半电脑系统挂了,也就算了,最多GUI还有一个提示框和实例, ...
- Java基础知识➣网络Socket(六)
概述 网络编程是指编写运行在多个设备(计算机)的程序,这些设备都通过网络连接起来. java.net 包中提供了两种常见的网络协议的支持: TCP:TCP 是传输控制协议的缩写,它保障了两个应用程序之 ...
- Java网络编程--套接字Socket
一.套接字Socket IP地址标志Internet上的计算机,端口号标志正在计算机上运行的进程(程序). 端口号被规定为一个16位的0--65535之间的整数,其中,0--1023被预先定义的服务通 ...
- java网络编程ServerSocket类 和Socket类的常用构造方法及其方法
Socket类Socket(InetAddress address, int port) 创建一个流套接字并将其连接到指定 IP 地址的指定端口号.Socket(String host, int po ...
- JAVA I/O(四)网络Socket和ServerSocket
<Thinking in Enterprise Java>中第一章描述了用Socket和Channel的网络编程,核心即为Socket和Channel,本文简单讲述Socket的应用. S ...
- 如何使用socket进行java网络编程(三)
本篇文章继续记录java网络通讯编程的学习.在本系列笔记的第一篇中曾经记录过一个项目中的程序,当时还处于项目早期,还未进入与第三方公司的联调阶段,笔者只是用java写了一个client程序模拟了一下第 ...
- 如何使用socket进行java网络编程(二)
通过在如何使用socket进行java网络编程(一)中程序的编写,可以总结出一些常用的java socket编程的范例来. ServerSocket server = new ServerSocket ...
随机推荐
- 金蝶K/3 Cloud 界面解析过程
服务端 目前也就是iis服务器生成Json描述返回给不同的展现端最解析. 不同的展现端,可以有Silverlight.WPF.Html5.Winform 当然还有IOS和Android端做解析展现 对 ...
- H5学习系列之Audio和Video
1.视频文件:音频轨道.视频轨道和一些元数据(视频封面.标题.子标题.字幕等相关信息). 2.目前H5还不支持的:流式音频和视频(H5对视频的支持只限于加载的全部媒体文件).H5的媒体收到跨域资源共享 ...
- XAF学习笔记1
写软件很多年了.看过的框架用过的框架非常多.一直想要一种框架,说不出的心烦重复的数据库设计,重复的Model生成,重复的界面设计 一直寻寻觅觅,终于找到一个框架,DEV的XAF,DEV控件用了N年了, ...
- Iscroll解析
做了一些移动端的产品,发现一些滚动效果很多会使用 iscroll 作为底层库(如阿里小蜜).iscroll 的文档已经好久没更新了,而且比较简单,经常需要直接读源码.这里写一篇总结,作为对 iscro ...
- 【转】Crontab定时任务配置
原文出处:http://www.cnblogs.com/kerrycode/p/3238346.html CRONTAB概念/介绍 crontab命令用于设置周期性被执行的指令.该命令从标准输入设备读 ...
- win10 virtualbox5, ubuntu16.04 xshell5配合使用
这个搭配很好用,各软件的安装很容易,ubuntu安装进virtualbox后安装增强功能,然后将网络连接方式改为桥接,直接改为桥接就可以了,其他的不用变,这个比以前的版本好用多了.这个桥接解决了宿主机 ...
- kinect driver install (ubuntu 14.04 & ros-indigo)
kinect driver 安装过程: 1.在ubuntu上安装kinect驱动比较繁琐,需要安装以下3个驱动包, OpenNI-Bin-Dev-Linux-x64-v1.5.7.10 NITE-Bi ...
- STM32 DAC的配置与使用
本博文转自:http://blog.chinaunix.net/uid-24219701-id-4101802.html STM32 的 DAC 模块(数字/模拟转换模块)是 12 位数字输入,电压输 ...
- Mysql 启动不了,问题集锦
1. 报错信息 mysqld_safe mysqld from pid file xxx.pid ended 解决办法: 可能是pid所在目录,没有权限,赋予权限即可 2. 找不到 /tmp/mysq ...
- bootstrap框架 导航条组件使用
本文记载boot 导航条组件使用方法 导航条组件 导航条是在您的应用或网站中作为导航页头的响应式基础组件.它们在移动设备上可以折叠(并且可开可关),且在视口(viewport)宽度增加时逐渐变为水平展 ...