这是在一本java教材上看到的,做了点修改。具体本教材记不清楚了,Sorry.放在这里,只是让自己需要的时候能够容易找到。

程序分两部分,服务端和客户端。先把服务端运行起来,在运行客户端。整个过程就是客户端想服务端发送String,服务端再返回。客户端的String由键盘输入得到。

服务器端。

  1. package net.tcp;
  2. import java.io.BufferedReader;
  3. import java.io.IOException;
  4. import java.io.InputStreamReader;
  5. import java.io.PrintWriter;
  6. import java.net.ServerSocket;
  7. import java.net.Socket;
  8. public class Server extends Thread
  9. {
  10. ServerSocket server = null;
  11. Socket sk = null;
  12. BufferedReader rdr = null;
  13. PrintWriter wtr = null;
  14. public Server()
  15. {
  16. try
  17. {
  18. server = new ServerSocket(1987);
  19. }
  20. catch (IOException e)
  21. {
  22. e.printStackTrace();
  23. }
  24. }
  25. public void run()
  26. {
  27. while (true)
  28. {
  29. System.out.println("Listenning...");
  30. try
  31. {
  32. //                  每个请求交给一个线程去处理
  33. sk = server.accept();
  34. ServerThread th = new ServerThread(sk);
  35. th.start();
  36. sleep(1000);
  37. }
  38. catch (Exception e)
  39. {
  40. e.printStackTrace();
  41. }
  42. }
  43. }
  44. public static void main(String [] args)
  45. {
  46. new Server().start();
  47. }
  48. class ServerThread extends Thread
  49. {
  50. Socket sk = null;
  51. public ServerThread(Socket sk)
  52. {
  53. this.sk = sk;
  54. }
  55. public void run()
  56. {
  57. try
  58. {
  59. wtr = new PrintWriter(sk.getOutputStream());
  60. rdr = new BufferedReader(new InputStreamReader(sk
  61. .getInputStream()));
  62. String line = rdr.readLine();
  63. System.out.println("从客户端来的信息:" + line);
  64. //              特别,下面这句得加上     “\n”,
  65. wtr.println("你好,服务器已经收到您的信息!'" + line + "'\n");
  66. wtr.flush();
  67. System.out.println("已经返回给客户端!");
  68. }
  69. catch (IOException e)
  70. {
  71. e.printStackTrace();
  72. }
  73. }
  74. }
  75. }

客户端:

  1. package net.tcp;
  2. import java.io.BufferedReader;
  3. import java.io.BufferedWriter;
  4. import java.io.InputStreamReader;
  5. import java.io.OutputStreamWriter;
  6. import java.io.PrintWriter;
  7. import java.net.Socket;
  8. public class Client extends Thread
  9. {
  10. Socket sk = null;
  11. BufferedReader reader = null;
  12. PrintWriter wtr = null;
  13. BufferedReader keyin = null;
  14. public Client()
  15. {
  16. keyin = new BufferedReader(new InputStreamReader(System.in));
  17. try
  18. {
  19. sk = new Socket("127.0.0.1", 1987);
  20. }
  21. catch (Exception e)
  22. {
  23. e.printStackTrace();
  24. }
  25. }
  26. public void run()
  27. {
  28. try
  29. {
  30. reader = new BufferedReader(new InputStreamReader(sk
  31. .getInputStream()));
  32. wtr = new PrintWriter(sk.getOutputStream());
  33. String get = keyin.readLine();
  34. while (true)
  35. {
  36. if (get != null & get.length() > 0)
  37. {
  38. wtr.println(get);
  39. wtr.flush();
  40. //                  wtr.close();
  41. //                  System.out.println(get + "发送完毕");
  42. }
  43. if (reader != null)
  44. {
  45. String line = reader.readLine();
  46. System.out.println("从服务器来的信息:" + line);
  47. }
  48. }
  49. }
  50. catch (Exception e)
  51. {
  52. e.printStackTrace();
  53. }
  54. }
  55. public static void main(String [] args)
  56. {
  57. new Client().start();
  58. }
  59. }
分享到:

java Socket和ServerSocket多线程编程的更多相关文章

  1. JAVA: Socket和ServerSocket网络编程

    面是本次学习的笔记.主要分异常类型.交互原理.Socket.ServerSocket.多线程这几个方面阐述. 异常类型 在了解Socket的内容之前,先要了解一下涉及到的一些异常类型.以下四种类型都是 ...

  2. Delphi Socket通信及多线程编程总结

    http://cxhblog.blog.sohu.com/41930676.html 一.Socket通信: Delphi在ScktComp单元中对WinSock进行了封装,该单元提供了TAbstra ...

  3. [Java]Socket和ServerSocket学习笔记

    对于即时类应用或者即时类的游戏,HTTP协议很多时候无法满足于我们的需求.这会,Socket对于我们来说就非常实用了.下面是本次学习的笔记.主要分异常类型.交互原理.Socket.ServerSock ...

  4. Java高并发下多线程编程

    1.创建线程 Java中创建线程主要有三种方式: 继承Thread类创建线程类: 定义Thread类的子类,并重写该类的run方法,该run方法的方法体就代表了线程要完成的任务.因此也把run方法称为 ...

  5. 吴裕雄--天生自然 JAVA开发学习:多线程编程

    class RunnableDemo implements Runnable { private Thread t; private String threadName; RunnableDemo( ...

  6. ★Java多线程编程总结 系列 转

    下面是Java线程系列博文的一个编目:   Java线程:概念与原理 Java线程:创建与启动 Java线程:线程栈模型与线程的变量 Java线程:线程状态的转换 Java线程:线程的同步与锁 Jav ...

  7. Java多线程编程总结(精华)

    Java多线程编程总结 2007-05-17 11:21:59 标签:多线程 java 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http ...

  8. (转)Java多线程编程总结

    -------------------------------------------------------------------------------------------------   ...

  9. [Java][读书笔记]多线程编程

    前言:最近复习java,发现一本很好的资料,<J​a​v​a​2​参​考​大​全​ ​(​第​五​版​)​> ​ ​H​e​r​b​e​r​t​.Schildt.书比较老了,06年的,一些 ...

随机推荐

  1. 在局域网内部实现远程web终端服务

    在局域网内部实现远程web终端服务 前言 如题,本文主要介绍了在局域网内部实现访问web终端服务功能. 实验环境 如下图所示,实验环境由三个部分组成:分别由局域网内部客户端.重定向服务器.以及两台提供 ...

  2. Eclipse使用较多的快捷键

    快速修正:Ctrl+1 单词补全:Alt+/ 快速Outline:Ctrl+O 删除行:Ctrl+D 选中到行末/行首:Shift+End/Home 注释:Ctrl+/ 变为大/小写:Ctrl+Shi ...

  3. DOM父节点、子节点例子

    父节点 <body> <ul id="oUl"> <li><a href="#">隐藏1</a>&l ...

  4. [2017BUAA软工]个人阅读作业+总结

    阅读作业 没有银弹 No Silver Bullet - Essence and Accidents of Software Engineering - Brooks 在这篇论文中,作者阐述了软件的四 ...

  5. 以太坊 链私有链环境搭建(windows)

    摸索以太坊区块链技术几个月了.最近打算逐步的把自己学到的东西和大家分享一下.在阅读本文之前,希望大家能对区块链的概念能有所了解.这样操作过程中的环节理解更深入.下面开始进入准备.因为本次是window ...

  6. 【bzoj4537】 Hnoi2016—最小公倍数

    http://www.lydsy.com/JudgeOnline/problem.php?id=4537 (题目链接) 题意 给出一个${n}$个点${m}$条边的无向图,每条边有两个权值${a,b} ...

  7. [学习笔记]插头dp

    基于连通性的状压dp 巧妙之处:插头已经可以表示内部所有状态了. 就是讨论麻烦一些. 简介 转移方法:逐格转移,分类讨论 记录状态方法:最小表示法(每次要重新编号,对于一类没用“回路路径”之类的题,可 ...

  8. 项目实战SportsStore——订单处理模块

    前面的步骤如果顺利完成,你的网站运行之后应该能够正常显示下面三个页面: 1.产品列表 2.购物车内容页面 在某个商品后面点击“添加到购物车”则出现下图页面: 此页面上点击“继续购物”按钮则返回到产品列 ...

  9. swift学习笔记3

    1.在 Swift 中,枚举类型是一等(first-class)类型.它们采用了很多在传统上只被类(class)所支持的特性,例如计算型属性(computed properties),用于提供枚举值的 ...

  10. SQL记录-PLSQL函数

    PL/SQL函数 PL/SQL函数与过程相同,不同之处在于函数有一个返回值.因此,前面的章节中的所有讨论都适用于函数. 创建函数 建立一个独立函数可以使用CREATE FUNCTION语句创建.CRE ...