//服务器端代码

public class Service { //服务器

public static void main(String[] args) {
ServerSocket serverSocket=null;
Socket socket=null;
try {
//创建一个超市
serverSocket=new ServerSocket(8800);
while(true){
//超市开门 等待顾客上门购物 怎么保证超市是24消失营业的??
socket = serverSocket.accept();
//使用多线程来实现多个顾客能同时购物 同时结账
ServiceThread thread=new ServiceThread(socket);
thread.start();
}
} catch (IOException e) {
e.printStackTrace();
}


}


}

服务器端代码

//服务器端需要的线程类

public class ServiceThread extends Thread {

//没启动一个线程 就相当于有一个顾客 进入 超市
Socket socket=null;

public ServiceThread(Socket socket) {
this.socket=socket;
}

@Override
public void run() {
InputStream is=null;
OutputStream os=null;
ObjectInputStream ois=null; //反序列化
try {
//拿出钱包,推上购物车
is=socket.getInputStream();
os=socket.getOutputStream();
//反序列化 获取 顾客的信息
ois=new ObjectInputStream(is);
User user=(User) ois.readObject(); //读到进入超市的顾客信息
if (user!=null) {
System.out.println("服务器说:您的姓名是:"+user.getUserName());
}
//给顾客一个回应
os.write("欢迎您的光临".getBytes());
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}finally{
try {
os.close();
ois.close();
is.close();
} catch (IOException e) {
e.printStackTrace();
}

}


}


}

服务器需要的线程类

//客户端代码

public class Client1 { //第一个顾客

public static void main(String[] args) {
Socket socket=null;
InputStream is=null;
OutputStream os=null;
ObjectOutputStream oos=null;
//接收服务器的信息 读
BufferedReader br=null;


try {
//进入了我们指定的 超市购物
socket=new Socket("localhost", 8800);
is=socket.getInputStream();
os=socket.getOutputStream();
//序列化对象
oos=new ObjectOutputStream(os);
User user=new User("小黑黑1", "admin");
oos.writeObject(user);
//购物完毕 shutdownOutput 与 close
socket.shutdownOutput();

//接收到服务器给你说的 欢迎光临
br=new BufferedReader(new InputStreamReader(is));
String line=null;
while((line=br.readLine())!=null){
System.out.println("我是客户端:服务器 对我说:"+line);
}

} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally{
try {
br.close();
oos.close();
os.close();
is.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
}

}




}
}

客户端代码

多线程完成socket的更多相关文章

  1. Python拾忆--多线程的socket服务器

    阳光明媚的午后,想想最近要开始从写Java到写Python了,就随手打开电脑来体验一下Python与Java之间的不同吧~ 记得我还在上大二的时候,那个时候才开始学Java,最感兴趣的就是Java书最 ...

  2. C# 实现的多线程异步Socket数据包接收器框架

    转载自Csdn : http://blog.csdn.net/jubao_liang/article/details/4005438 几天前在博问中看到一个C# Socket问题,就想到笔者2004年 ...

  3. 通过编写聊天程序来熟悉python中多线程及socket的用法

    1.引言 Python中提供了丰富的开源库,方便开发者快速就搭建好自己所需要的应用程序.本文通过编写基于tcp/ip协议的通信程序来熟悉python中socket以及多线程的使用. 2.python中 ...

  4. 多线程Java Socket编程示例

    package org.merit.test.socket; import java.io.BufferedReader; import java.io.IOException; import jav ...

  5. 《Unity 3D游戏客户端基础框架》多线程异步 Socket 框架构建

    引言: 之前写过一个 demo 案例大致讲解了 Socket 通信的过程,并和自建的服务器完成连接和简单的数据通信,详细的内容可以查看 Unity3D -- Socket通信(C#).但是在实际项目应 ...

  6. 可扩展多线程异步Socket服务器框架EMTASS 2.0 (转自:http://blog.csdn.net/hulihui)

    可扩展多线程异步Socket服务器框架EMTASS 2.0 (转自:http://blog.csdn.net/hulihui) 0 前言 >>[前言].[第1节].[第2节].[第3节]. ...

  7. 并发编程~~~多线程~~~计算密集型 / IO密集型的效率, 多线程实现socket通信

    一 验证计算密集型 / IO密集型的效率 IO密集型: IO密集型: 单个进程的多线程的并发效率高. 计算密集型: 计算密集型: 多进程的并发并行效率高. 二 多线程实现socket通信 服务器端: ...

  8. 利用多线程使socket服务端可以与多个客户端同时通讯

    利用多线程使socket服务端可以与多个客户端同时通讯 server import socket 1. 符合TCP协议的手机 server = socket.socket(socket.AF_INET ...

  9. day36——死锁、递归锁、信号量、GIL、多线程实现socket通信、线程池和进程池

    day36 死锁现象与递归锁 死锁现象 是指两个或两个以上的进程或线程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去.此时称系统处于死锁状态或系统产生了死锁,这 ...

随机推荐

  1. Codeforces Round #389 (Div. 2, Rated, Based on Technocup 2017 - Elimination Round 3) A

    Description Santa Claus is the first who came to the Christmas Olympiad, and he is going to be the f ...

  2. c++多线程の死锁与防止死锁

    如果有两把锁 lock1(mutex_gard 方式)和lock: 两者的调用顺序不同,会出现相互等待的情况,从而造成死锁: 为了避免死锁,我们可以: 1.每个线程中锁的调用顺序都相同: 2.使用st ...

  3. windows 7系统下出现某盘回收站损坏解决办法

    今天遇到一个从没有遇见的问题,就是领导说他的回收站损坏了,要我去看下,我一开始也没用辙,网上搜了很多,说在命令提示符里面修改,我试了不行,后来我这样做就好了:1.打开计算机 2.找到工具选项,单击选择 ...

  4. mysql实战之 批量update

    mysql实战之批量update 现阶段我们的业务量很小,要对admin_user表中的relationship字段进行更新,指定id是409.已知409是公司内的一服务中心,需要把该服务中心放到区代 ...

  5. Eclipse 实现关键字自动补全功能

    一般默认情况下,Eclipse ,MyEclipse 的代码提示功能是比Microsoft Visual Studio的差很多的,主要是Eclipse ,MyEclipse本身有很多选项是默认关闭的, ...

  6. php+js进度读取条

    <html> <head> <meta http-equiv="Content-Type" content="text/html; char ...

  7. 调试多线程 & 查死锁的bug & gcore命令 & gdb对多线程的调试 & gcore & pstack & 调试常用命令

    gdb thread apply all bt 如果你发现有那么几个栈停在 pthread_wait 或者类似调用上,大致就可以得出结论:就是它们几个儿女情长,耽误了整个进程. 注意gdb的版本要高于 ...

  8. UIStackView使用 (堆视图)

    一基本使用 1创建多个子控件 for (int i = 0; i < 3; i++) { UIButton *imgBtn = [UIButton buttonWithType:UIButton ...

  9. centos 更新linux内核

    之前一直使用centos 7系统进行开发,centos 7.0 系统自带的linux内核版本为 linx 3.10,最近开发需要使用到socket的reuse port特性,该特性在linux 3.9 ...

  10. java中Array/List/Map/Object与Json互相转换详解

    http://blog.csdn.net/xiaomu709421487/article/details/51456705 JSON(JavaScript Object Notation): 是一种轻 ...