java Socket和ServerSocket多线程编程
这是在一本java教材上看到的,做了点修改。具体本教材记不清楚了,Sorry.放在这里,只是让自己需要的时候能够容易找到。
程序分两部分,服务端和客户端。先把服务端运行起来,在运行客户端。整个过程就是客户端想服务端发送String,服务端再返回。客户端的String由键盘输入得到。
服务器端。
- package net.tcp;
- import java.io.BufferedReader;
- import java.io.IOException;
- import java.io.InputStreamReader;
- import java.io.PrintWriter;
- import java.net.ServerSocket;
- import java.net.Socket;
- public class Server extends Thread
- {
- ServerSocket server = null;
- Socket sk = null;
- BufferedReader rdr = null;
- PrintWriter wtr = null;
- public Server()
- {
- try
- {
- server = new ServerSocket(1987);
- }
- catch (IOException e)
- {
- e.printStackTrace();
- }
- }
- public void run()
- {
- while (true)
- {
- System.out.println("Listenning...");
- try
- {
- // 每个请求交给一个线程去处理
- sk = server.accept();
- ServerThread th = new ServerThread(sk);
- th.start();
- sleep(1000);
- }
- catch (Exception e)
- {
- e.printStackTrace();
- }
- }
- }
- public static void main(String [] args)
- {
- new Server().start();
- }
- class ServerThread extends Thread
- {
- Socket sk = null;
- public ServerThread(Socket sk)
- {
- this.sk = sk;
- }
- public void run()
- {
- try
- {
- wtr = new PrintWriter(sk.getOutputStream());
- rdr = new BufferedReader(new InputStreamReader(sk
- .getInputStream()));
- String line = rdr.readLine();
- System.out.println("从客户端来的信息:" + line);
- // 特别,下面这句得加上 “\n”,
- wtr.println("你好,服务器已经收到您的信息!'" + line + "'\n");
- wtr.flush();
- System.out.println("已经返回给客户端!");
- }
- catch (IOException e)
- {
- e.printStackTrace();
- }
- }
- }
- }
客户端:
- package net.tcp;
- import java.io.BufferedReader;
- import java.io.BufferedWriter;
- import java.io.InputStreamReader;
- import java.io.OutputStreamWriter;
- import java.io.PrintWriter;
- import java.net.Socket;
- public class Client extends Thread
- {
- Socket sk = null;
- BufferedReader reader = null;
- PrintWriter wtr = null;
- BufferedReader keyin = null;
- public Client()
- {
- keyin = new BufferedReader(new InputStreamReader(System.in));
- try
- {
- sk = new Socket("127.0.0.1", 1987);
- }
- catch (Exception e)
- {
- e.printStackTrace();
- }
- }
- public void run()
- {
- try
- {
- reader = new BufferedReader(new InputStreamReader(sk
- .getInputStream()));
- wtr = new PrintWriter(sk.getOutputStream());
- String get = keyin.readLine();
- while (true)
- {
- if (get != null & get.length() > 0)
- {
- wtr.println(get);
- wtr.flush();
- // wtr.close();
- // System.out.println(get + "发送完毕");
- }
- if (reader != null)
- {
- String line = reader.readLine();
- System.out.println("从服务器来的信息:" + line);
- }
- }
- }
- catch (Exception e)
- {
- e.printStackTrace();
- }
- }
- public static void main(String [] args)
- {
- new Client().start();
- }
- }

java Socket和ServerSocket多线程编程的更多相关文章
- JAVA: Socket和ServerSocket网络编程
面是本次学习的笔记.主要分异常类型.交互原理.Socket.ServerSocket.多线程这几个方面阐述. 异常类型 在了解Socket的内容之前,先要了解一下涉及到的一些异常类型.以下四种类型都是 ...
- Delphi Socket通信及多线程编程总结
http://cxhblog.blog.sohu.com/41930676.html 一.Socket通信: Delphi在ScktComp单元中对WinSock进行了封装,该单元提供了TAbstra ...
- [Java]Socket和ServerSocket学习笔记
对于即时类应用或者即时类的游戏,HTTP协议很多时候无法满足于我们的需求.这会,Socket对于我们来说就非常实用了.下面是本次学习的笔记.主要分异常类型.交互原理.Socket.ServerSock ...
- Java高并发下多线程编程
1.创建线程 Java中创建线程主要有三种方式: 继承Thread类创建线程类: 定义Thread类的子类,并重写该类的run方法,该run方法的方法体就代表了线程要完成的任务.因此也把run方法称为 ...
- 吴裕雄--天生自然 JAVA开发学习:多线程编程
class RunnableDemo implements Runnable { private Thread t; private String threadName; RunnableDemo( ...
- ★Java多线程编程总结 系列 转
下面是Java线程系列博文的一个编目: Java线程:概念与原理 Java线程:创建与启动 Java线程:线程栈模型与线程的变量 Java线程:线程状态的转换 Java线程:线程的同步与锁 Jav ...
- Java多线程编程总结(精华)
Java多线程编程总结 2007-05-17 11:21:59 标签:多线程 java 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http ...
- (转)Java多线程编程总结
------------------------------------------------------------------------------------------------- ...
- [Java][读书笔记]多线程编程
前言:最近复习java,发现一本很好的资料,<Java2参考大全 (第五版)> Herbert.Schildt.书比较老了,06年的,一些 ...
随机推荐
- 团队项目设计完善&编码测试
任务1:软件设计方案说明书 <基于弹幕评论的大数据分析平台软件设计方案说明书>仓库链接:点击跳转 任务2:搭建并配置项目集成开发环境: 开发环境 java version "1. ...
- Sublime Text添加插入带当前时间说明
Sublime Text添加插入带当前时间说明 作者:木尘 日期:2014-11-25 插件实现插入带时间功能的说明: 1. 创建插件: Tools → New Plugin: import da ...
- OneZero第五周第二次站立会议(2016.4.19)
1. 时间: 15:15--15:25 共计10分钟. 2. 成员: X 夏一鸣 * 组长 (博客:http://www.cnblogs.com/xiaym896/), G 郭又铭 (博客:http ...
- webapi Route 特性
转载:http://www.th7.cn/Program/net/201410/302571.shtml ASP.NET Web API路由,简单来说,就是把客户端请求映射到对应的Action上的过程 ...
- MySQL 主从复制详解
读写分离的意思是,写入的时候向 a 服务器写入,而读出的时候从 b c d 甚至更多的服务器读出:这样的架构适合于读多写少的应用,最典型的就是火车购票系统,一般我们买票的时候要先查询好多次,包括车次啊 ...
- Spring定时服务QuartZ
在JavaEE系统中,我们会经常用到定时任务,比如每天凌晨生成前天报表,每一小时生成汇总数据等等. 我们可以使用java.util.Timer结合java.util.TimerTask来完成这项工作, ...
- 【题解】 Codeforces 662A Gambling Nim (线性基)
662A,戳我戳我 Solution: 我们先取\(ans=a[1] \bigoplus a[2] \bigoplus ... \bigoplus a[n]\),然后我们定义\(c[i]=a[i] \ ...
- 【题解】 bzoj4004: [JLOI2015]装备购买 (线性基)
bzoj4004,戳我戳我 Solution: 裸的线性基,这没啥好说的,我们说说有意思的地方(就是我老是wa的地方) Attention: 这题在\(luogu\),上貌似不卡精度,\(bzoj\) ...
- 【转】crc16几种标准校验算法及c语言代码
一.CRC16校验码的使用 现选择最常用的CRC-16校验,说明它的使用方法. 根据Modbus协议,常规485通讯的信息发送形式如下: 地址 功能码 数据信息 校验码 1byte 1byte nby ...
- Python 进程间的通信
#-*-coding:utf-8-*- '''python提供了多种进程间的通信方式,如:Queue,Pipe,Valie+Array等. Queue与Pipe的区别在于Pipe常用来在两个进程间通信 ...