socket多线程方式案例
记下来,方便以后查看
User类
package com.xujingyang.ThreadSocket; import java.io.Serializable; public class User implements Serializable {
private String name;
private int age; public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
} public User(String name, int age) {
super();
this.name = name;
this.age = age;
} public User() {
} @Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + age;
result = prime * result + ((name == null) ? 0 : name.hashCode());
return result;
} @Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
User other = (User) obj;
if (age != other.age)
return false;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
return true;
} @Override
public String toString() {
return "User [name=" + name + ", age=" + age + "]";
}
}
客户端类
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();
} } }
socket多线程方式案例的更多相关文章
- 【ALB技术笔记】基于多线程方式的串行通信接口数据接收案例
基于多线程方式的串行通信接口数据接收案例 广东职业技术技术学院 欧浩源 1.案例背景 在本博客的<[CC2530入门教程-06]CC2530的ADC工作原理与应用>中实现了电压数据采集的 ...
- 【ALB学习笔记】基于多线程方式的串行通信接口数据接收案例
基于多线程方式的串行通信接口数据接收案例 广东职业技术技术学院 欧浩源 1.案例背景 在本博客的<[CC2530入门教程-06]CC2530的ADC工作原理与应用>中实现了电压数据采集的 ...
- java 网络编程基础 TCP/IP协议:服务端ServerSocket;客户端Socket; 采用多线程方式处理网络请求
1.Java中客户端和服务器端通信的简单实例 Java中能接收其他通信实体连接请求的类是ServerSocket,ServerSocket对象用于监听来自客户端的Socket连接,如果没有连接,它将一 ...
- java基础-多线程应用案例展示
java基础-多线程应用案例展示 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.两只熊,100只蜜蜂,蜜蜂每次生产的蜂蜜量是1,罐子的容量是30,熊在罐子的蜂蜜量达到20的时候 ...
- Java基础知识强化之IO流笔记44:IO流练习之 复制图片的 4 种方式案例
1. 复制图片的 4 种方式案例: 分析: 复制数据,如果我们知道用记事本打开并能够读懂,就用字符流,否则用字节流. 通过该原理,我们知道我们应该采用字节流. 而字节流有4种方式,所以做这个题目我们有 ...
- java socket 多线程网络传输多个文件
http://blog.csdn.net/njchenyi/article/details/9072845 java socket 多线程网络传输多个文件 2013-06-10 21:26 3596人 ...
- java Socket多线程聊天程序
参考JAVA 通过 Socket 实现 TCP 编程 参考java Socket多线程聊天程序(适合初学者) 以J2SDK-1.3为例,Socket和ServerSocket类库位于java.net包 ...
- Android-Java-解决(多线程存钱案例)的安全隐患-synchronized
多线程存钱案例: package android.java.thread10; /** * 两个储户,到同一个银行存钱,每个人存了3次,一次1000000.00元 * 1.描述银行 * 2.描述储户任 ...
- C#多线程同步案例实操
好久没有写博客了,为了养成学习的习惯,培养积极年轻的心态,又回到了博客园这个平台继续撸起时隔多年未光顾的空间. 项目需求: 实现一个简单的获取始发目的耗时.距离,将结果输出表格. 方案思路: 通过多线 ...
随机推荐
- 返回结果的HTTP状态码
HTTP状态码的职责是当客户端向服务器发送请求时,描述返回的请求结果. 2xx成功 2xx的响应结果表明请求被正常处理. 200 OK 请求已正常处理 204 No Content 请求处理成功,但是 ...
- 项目管理理论与实践(4)——UML应用(上)
本篇文章介绍UML的相关知识.参考<UML从入门到精通> 一.UML综述 1. UML简介 统一建模语言(UML)是一个通用的可视化建模语言,用于对软件进行描述.可视化处理.构造和建立软件 ...
- 分布式_理论_07_ZAB
一.前言 二.参考资料 1.分布式理论(七)—— 一致性协议之 ZAB
- CentOS 6.8安装Docker V1.0
rpm -Uvh http://dl.Fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm yum -y install do ...
- unix的输入输出操作
unix的输入输出操作 使用的头文件 #include <unistd.h> #include <stdio.h> 函数说明 ssize_t read(int fd, void ...
- AtCoder Petrozavodsk Contest 001 B - Two Arrays
Time limit : 2sec / Memory limit : 256MB Score : 300 points Problem Statement You are given two inte ...
- C# 读xml注释或过滤xml注释
有这么个需求: 要统计所有的配置文件,这些配置文件都xml格式,并把这些配置写到数据表里,如果有注释要把这些注释写到对应配置对象的描述字段上 <item id="" key= ...
- word 2007,以不同颜色突出显示文本的快捷键,highlight命令
命令:highlight 默认快捷键:Ctrl+Alt+H 查询或自定义快捷键的方法: 打开一个文档→单击左上角的office图标→word选项 左边的列表中选择自定义→在右边的窗口中,底部有个“ ...
- tyvj 2054 [Nescafé29]四叶草魔杖——最小生成树+状压dp
题目:http://www.joyoi.cn/problem/tyvj-2054 枚举点集,如果其和为0,则作为一个独立的块求一下最小生成树.因为它可以不和别的块连边. 然后状压dp即可. 别忘了判断 ...
- php 字符串的分割
http://blog.sina.com.cn/s/blog_71ed1b870102uysa.html