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#多线程同步案例实操
好久没有写博客了,为了养成学习的习惯,培养积极年轻的心态,又回到了博客园这个平台继续撸起时隔多年未光顾的空间. 项目需求: 实现一个简单的获取始发目的耗时.距离,将结果输出表格. 方案思路: 通过多线 ...
随机推荐
- [转载]java导出word的5种方式
在网上找了好多天将数据库中信息导出到word中的解决方案,现在将这几天的总结分享一下.总的来说,java导出word大致有5种解决方案: 1:Jacob是Java-COM Bridge的缩写,它在Ja ...
- 【.Net】Byte,Stream,File的转换
引言 文件的传输和读写通常都离不开Byte,Stream,File这个类,这里我简单封装一下,方便使用. 帮助类 public static class FileHelper { / ...
- 201621123014《Java程序设计》第七周学习总结
1. 本周学习总结 1.1 思维导图:Java图形界面总结 答: 1.2 可选:使用常规方法总结其他上课内容. 答:1.Swing组件主要分为容器组件和其他组件. 2.JFrame和JPanel都可以 ...
- 一直想写的关于tarjan算法的理解——向struct edge大佬低头
tarjan的算法精髓就是dfn[]和low[]数组 dfn[i]表示在该节点被搜索的次序(时间戳) low[i]表示i或i的子树可以追溯到的最早的栈中节点 判断有强连通分量的条件就是 dfn[i]= ...
- C语言编译全过程
编译的概念:编译程序读取源程序(字符流),对之进行词法和语法的分析,将高级语言指令转换为功能等效的汇编代码,再由汇编程序转换为机器语言,并且按照操作系统对可执行文件格式的要求链接生成可执行程序. ...
- UVA - 11107 Life Forms (广义后缀自动机)
题意:给你n个字符串,求出在超过一半的字符串中出现的所有子串中最长的子串,按字典序输出. 对这n个字符串建广义后缀自动机,建完后每个字符串在自动机上跑一遍,沿fail树向上更新所有子串结点的出现次数( ...
- LeetCode Largest Palindrome Product
原题链接在这里:https://leetcode.com/problems/largest-palindrome-product/description/ 题目: Find the largest p ...
- java 实现插入排序
sorted数组第0个位置没有放数据 从sorted数组的第二个数据开始处理 package com.learn; public class InsertionSort { public static ...
- andriod&linux&c函数原型
1.dlopen 功能:打开一个动态链接库,并返回动态链接库的句柄 包含头文件: #include <dlfcn.h> 函数定义: void * dlopen( const char * ...
- 如何让 PADS Layout 识别到板框
如何让 PADS Layout 识别到板框 在很久很久以前 PADS Laout 还是 PowerPCB 的时候,铺铜是不认识板框的. 当有铺铜时必须复制一份板框再设置为铺铜才可以. 但到了 PADS ...