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();

    }
}
时间: 2024-09-20 19:42:07

java 网络(socket)的相关文章

java网络socket编程详解

7.2 面向套接字编程    我们已经通过了解Socket的接口,知其所以然,下面我们就将通过具体的案例,来熟悉Socket的具体工作方式 7.2.1使用套接字实现基于TCP协议的服务器和客户机程序    依据TCP协议,在C/S架构的通讯过程中,客户端和服务器的Socket动作如下: 客户端: 1.用服务器的IP地址和端口号实例化Socket对象. 2.调用connect方法,连接到服务器上. 3.将发送到服务器的IO流填充到IO对象里,比如BufferedReader/PrintWriter

Java基础知识—网络Socket(六)

概述 网络编程是指编写运行在多个设备(计算机)的程序,这些设备都通过网络连接起来. java.net 包中提供了两种常见的网络协议的支持: TCP:TCP 是传输控制协议的缩写,它保障了两个应用程序之间的可靠通信.通常用于互联网协议,被称 TCP / IP. UDP:UDP 是用户数据报协议的缩写,一个无连接的协议.提供了应用程序之间要发送的数据的数据包. Socket编程 套接字使用TCP提供了两台计算机之间的通信机制. 客户端程序创建一个套接字,并尝试连接服务器的套接字.当连接建立时,服务器

java网络编程socket解析

转载:http://www.blogjava.net/landon/archive/2013/07/02/401137.html Java网络编程精解笔记2:Socket详解 Socket用法详解 在C/S通信模式中,client需要主动创建于server连接的Socket(套接字).服务器端收到了客户端的连接请求,也会创建与客户连接的Socket.Socket可看做是通信两端的收发器.server与client都通过Socket来收发数据. 1.构造Socket 1.Socket() 2.So

java网络编程socket\server\TCP笔记(转)

java网络编程socket\server\TCP笔记(转) 2012-12-14 08:30:04|  分类: Socket |  标签:java  |举报|字号 订阅 1 TCP的开销 a  连接协商三次握手,c->syn->s,s->syn ack->c, c->ack->s b  关闭协商四次握手,c->fin->s, s->ack-c,s->fin->c,c->ack->s c  保持数据有序,响应确认等计算开销 d

Java网络编程【Socket服务端和客户端】

Socket 编程大家都不陌生,Java 学习中必学的部分,也是 Java网络编程核心内容之一.Java 网络编程又包括 TCP.UDP,URL 等模块.TCP 对应 Socket模块,UDP 对应 DatagramPacket 模块.URL 对应 URL 模块.其中 TCP 和 UDP 是网络传输协议,TCP 是数据流传输协议,UDP 是数据包传输协议.两者之间的异同就不在这里说了,推荐一本入门书籍 <TCPIP入门经典>.我们开始 Socket 服务端和客户端编程吧. 一.Socket 服

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

通过在如何使用socket进行java网络编程(一)中程序的编写,可以总结出一些常用的java socket编程的范例来. ServerSocket server = new ServerSocket(_PORT_); while (true) { Socket nextClient = server.accept(); SocketHandler handler = new SocketHandler(nextClient); Thread t = new Thread(handler); t

【转】JAVA网络编程之Socket用法

JAVA网络编程之Socket用法 分类: JAVA2012-08-24 15:56 710人阅读 评论(0) 收藏 举报 在客户/服务器通信模式中,客户端需要主动建立与服务器连接的Socket,服务器端收到客户端的连接请求,也会创建与客户端连接的Socket.Socket可以看做是通信连接两端的收发器,客户端和服务店都通过Socket来收发数据. 1.构造Socket public Socket() 通过系统默认类型的 SocketImpl 创建未连接套接字 public Socket(Str

Java网络编程(ServerSocket和Socket)

服务器端 package org.tcp; import java.io.PrintStream; import java.net.ServerSocket; import java.net.Socket; public class HelloServer { public static void main(String[] args) throws Exception{ ServerSocket server = null; Socket client = null; PrintStream

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

Socket类Socket(InetAddress address, int port) 创建一个流套接字并将其连接到指定 IP 地址的指定端口号.Socket(String host, int port) 创建一个流套接字并将其连接到指定主机上的指定端口号.Socket(InetAddress address, int port, InetAddress localAddr, int localPort) 创建一个套接字并将其连接到指定远程地址上的指定远程端口.Socket(String ho

Java网络编程基础(二)-- 基于TCP/IP的Socket编程

本节讲点: 客户端套接字:Socket:Socket的创建和使用方法,以及Socket选项和异常. 服务端套接字:ServerSocket:SeverSocket的创建和使用方法,以及ServerSocket选项 简单的Client/Server对话程序 支持多客户端的Client/Server服务响应程序 在学习JDK的网络编程之前先要了解一下网络基础知识和网络协议. TCP(传输控制协议)一种基于连接的通信协议.可靠传输 UDP(用户数据包协议)不稳定连接的通信协议 TCP和UDP的端口如下