socket多线程方式案例

记下来,方便以后查看

User类

 1 package com.xujingyang.ThreadSocket;
 2
 3 import java.io.Serializable;
 4
 5 public class User implements Serializable {
 6     private String name;
 7     private int age;
 8
 9     public String getName() {
10         return name;
11     }
12
13     public void setName(String name) {
14         this.name = name;
15     }
16
17     public int getAge() {
18         return age;
19     }
20
21     public void setAge(int age) {
22         this.age = age;
23     }
24
25     public User(String name, int age) {
26         super();
27         this.name = name;
28         this.age = age;
29     }
30
31     public User() {
32     }
33
34     @Override
35     public int hashCode() {
36         final int prime = 31;
37         int result = 1;
38         result = prime * result + age;
39         result = prime * result + ((name == null) ? 0 : name.hashCode());
40         return result;
41     }
42
43     @Override
44     public boolean equals(Object obj) {
45         if (this == obj)
46             return true;
47         if (obj == null)
48             return false;
49         if (getClass() != obj.getClass())
50             return false;
51         User other = (User) obj;
52         if (age != other.age)
53             return false;
54         if (name == null) {
55             if (other.name != null)
56                 return false;
57         } else if (!name.equals(other.name))
58             return false;
59         return true;
60     }
61
62     @Override
63     public String toString() {
64         return "User [name=" + name + ", age=" + age + "]";
65     }
66 }

客户端类

package com.xujingyang.ThreadSocket;

import java.io.InputStream;
import java.io.ObjectOutputStream;
import java.net.Socket;

public class Client {
    public static void main(String[] args) throws Exception {
        Socket socket=new Socket("localhost", 9999);//监听端口

        ObjectOutputStream out=new ObjectOutputStream(socket.getOutputStream());//包装对象流

        out.writeObject(new User("小明", 21));//写入对象
        socket.shutdownOutput();//关闭流的占用

        //获取服务器发过来的消息
        InputStream in = socket.getInputStream();
        byte[] b=new byte[1024];
        in.read(b);
        System.out.println(new String(b,0,b.length));

        //关闭流
        in.close();
        out.close();
        socket.close();

    }
}

服务器类

package com.xujingyang.ThreadSocket;

import java.net.ServerSocket;
import java.net.Socket;

public class Server {
    public static void main(String[] args) throws Exception {
        ServerSocket socket=new ServerSocket(9999);//监听端口

        //循环监听接收各个客户端连接
        while (true) {
            Socket client = socket.accept();

            //开启多线程接受客户端信息
            ThreadServer ts=new ThreadServer(client);
            new Thread(ts).start();
        }

    }
}

服务器多线程接收类

package com.xujingyang.ThreadSocket;

import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.OutputStream;
import java.net.Socket;

/**
 * 多线程接受用户登陆,把客户端连接对象传入作为成员变量
 * @author 徐景洋
 */
public class ThreadServer implements Runnable {

    private Socket client;

    public ThreadServer(Socket client) {
        this.client=client;
    }

    @Override
    public void run() {
        try {
            //包装对象接收流
            ObjectInputStream in=new ObjectInputStream(client.getInputStream());
            User user = (User) in.readObject();//读取对象

            //比较是否符合标准.符合回答成功,否则失败
            OutputStream out = client.getOutputStream();
            if((new User("小明",21)).equals(user)){
                out.write("登陆成功".getBytes());
                System.out.println(user);
            }else{
                out.write("登陆失败".getBytes());
            }

            client.shutdownOutput();
            out.close();
            in.close();
            client.close();

        } catch (IOException | ClassNotFoundException e) {
            e.printStackTrace();
        }

    }

}

时间: 2024-10-13 08:02:19

socket多线程方式案例的相关文章

【ALB技术笔记】基于多线程方式的串行通信接口数据接收案例

基于多线程方式的串行通信接口数据接收案例 广东职业技术技术学院  欧浩源 1.案例背景 在本博客的<[CC2530入门教程-06]CC2530的ADC工作原理与应用>中实现了电压数据采集的程序设计,传感器模块以每1秒发送一帧数据的形式通过串口向上位机发送电压数据.其数据帧由4个字节组成:一个帧头和一个帧尾,中间两个字节为电压数据,其格式如下: 帧头(0xAF)    电压数据高8位    电压数据低8位    帧尾(0xFA) 在篇博文中,将讲述如何通过多线程的方式,从串口接收传感器发送过来的

从入门到实战,Netty多线程篇案例集锦

从入门到实战,Netty多线程篇案例集锦 原创 2015-09-10 李林峰 InfoQ Netty案例集锦系列文章介绍 1|Netty的特点 Netty入门比较简单,主要原因有如下几点: Netty的API封装比较简单,将复杂的网络通信通过BootStrap等工具类做了二次封装,用户使用起来比较简单: Netty源码自带的Demo比较多,通过Demo可以很快入门: Netty社区资料.相关学习书籍也比较多,学习资料比较丰富. 但是很多入门之后的Netty学习者遇到了很多困惑,例如不知道在实际项

Windows下基于socket多线程并发通信的实现

本文介绍了在Windows 操作系统下基于TCP/IP 协议Socket 套接口的通信机制以及多线程编程知识与技巧,并给出多线程方式实现多用户与服务端(C/S)并发通信模型的详细算法,最后展现了用C++编写的多用户与服务器通信的应用实例并附有程序. 关键词:Windows:套接字:多线程:并发服务器: Socket 是建立在传输层协议(主要是TCP 和UDP)上的一种套接字规范,最初由美国加州Berkley 大学提出,为UNIX 系统开发的网络通信接口,它定义了两台计算机之间通信的规范,sock

java多线程经典案例

/** * 典型案例:子线程执行10次,主线程执行100次,两者交替50次. */ package cn.itcast.lesson4; public class TestWaitNotify { public static void main(String[] args){ final Business business= new Business(); new Thread( new Runnable() { public void run() { for(int i=1;i<=50;i++

Rsync以守护进程(socket)的方式传输数据

Rsync以守护进程(socket)的方式传输数据 Rsync服务部署 一.以守护进程(socket)的方式传输数据(重点) 部署环境: 分别用uname命令查看各系统相关信息 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 [root@A-Server58 ~]# uname -r 2.6.18-308.el5 [root@A-Server58 ~]# uname -s Linux [root@A-Server58 ~]# uname -o GN

以守护进程(socket)的方式传输数据(重点)

以守护进程(socket)的方式传输数据(重点) 部署环境: 分别用uname命令查看各系统相关信息 [[email protected]~]# uname -r 6.18-308.el5 [[email protected]~]# uname -s Linux [[email protected]~]# uname -o GNU/Linux [[email protected]~]# uname -i x86_64 [[email protected]~]# uname -n A-Server

Java基础知识强化之IO流笔记44:IO流练习之 复制图片的 4 种方式案例

1. 复制图片的 4 种方式案例: 分析: 复制数据,如果我们知道用记事本打开并能够读懂,就用字符流,否则用字节流. 通过该原理,我们知道我们应该采用字节流. 而字节流有4种方式,所以做这个题目我们有4种方式.推荐掌握第4种. 数据源: c:\\a.jpg -- FileInputStream -- BufferedInputStream 目的地: d:\\b.jpg -- FileOutputStream -- BufferedOutputStream 2. 4 种方式代码示例: 1 pack

java socket 多线程网络传输多个文件

http://blog.csdn.net/njchenyi/article/details/9072845 java socket 多线程网络传输多个文件 2013-06-10 21:26 3596人阅读 评论(1) 收藏 举报  分类: JAVA(158)  由于需要研究了下用 java socket 传输文件,由于需要传输多个文件,因此,采用了多线程设计.客户端每个线程创建一个 socket 连接,每个 socket 连接负责传输一个文件,服务端的ServerSocket每次 accept

ConcurrentModificationException异常总结-多线程方式

1.多线程方式发生异常举例 1.1.java代码如下: final List<String> myList = createTestData(); new Thread(new Runnable() { @Override public void run() { for (String string : myList) { System.out.println("遍历集合 value = " + string); try { Thread.sleep(100); } cat