//服务器端代码

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. linux -- nano

    今天在git commit的时候碰到了一种编辑方式 -- 不会用 T.T,然后找了下相关的文档. ^G -- ctrl+g 帮助文档 ^O -- ctrl+o 写出,会出现下面的一行提示,是否保存,直 ...

  2. mysql查看修改字符集

    1.列出MYSQL支持的所有字符集: SHOW CHARACTER SET; 2.当前MYSQL服务器字符集设置 SHOW VARIABLES LIKE 'character_set_%'; 3.当前 ...

  3. 05 技术内幕 T-SQL 查询读书笔记(第四章)

    第四章 子查询:在外部查询内嵌套的内部查询(按照期望值的数量分为,标量子查询 scalar subqueries,多值子查询multivalued subqueries)(按照子查询对外部查询的依赖性 ...

  4. linux 无交互添加用户设置密码

    #!/bin/bash useradd -m test echo " | passwd --stdin test

  5. Android中文TTS

    如今在Android中开发中文语音播报有各式各样的云服务.SDK.API等云云,但是大部分服务是需要联网支持来进行语音合成的,在中文语音合成方面,科大讯飞无疑是佼佼者,而且它也提供了离线语音合成包(需 ...

  6. Xcode7 模拟器安装app (转)

    本文转自同事zz的博客http://archerzz.cn/ios/xcode-install-app.html 原由 很多时候,为了学习了解别人的app,很多时候我们是直接拿别人的app安装在自己的 ...

  7. Struts2中Action的使用(Struts2_Action)

    一.Action概要 二.动态调用   三.通配符(规则:*_*等价于{1_2}) 四.获取参数 1 1.方式一:逐个获取(推荐使用) 2 package com.aaron.action.param ...

  8. VS中Qt的探索02

    边看C++ GUI QT4教程,边在VS2010中进行编程学习探索. 在使用Qt设计师时,其中每一个对象的ObjectName属性是非常重要的,在程序功能的实现过程中,需要不断的使用该变量名. 当所有 ...

  9. 3个sprint的团队贡献分

    第一次冲刺贡献分   成员名字 贡献分 101丘娟 23 108周诗琦 26 107杨晓霞 24 124陈程 27     第二次冲刺贡献分   成员名字 贡献分 101丘娟 23 108周诗琦 27 ...

  10. ZOJ 2048 highways

    题目 比我想象地要容易很多..一开始想得太复杂了,本来想试一下kruskal算法的,嫌麻烦..还是用了之前1203的prim算法...以为要注意这道题的输出顺序,结果不用,直接输出就可以了,就是注意一 ...