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年的,一些 ...
随机推荐
- php redis 的基本操作
前言: 断断续续的接触了redis的使用.但是也就简单的记住了几个set.get方法,用的还是太少了吧.所以来做个笔记,记录下一些常用的命令. 内容: 首先是php连接redis. $redis = ...
- Jira 添加自定义字段
打开添加自定义字段,并选择字段类型 填写名称,并创建 3.选择关联的界面,并更新
- JwtUtils 工具类
/** * jwt工具类 */ public class JwtUtils { public static final String SUBJECT = "onehee"; *** ...
- RANCHER2.0 的简单使用
1. RANCHER2.0 能够管理 k8s 集群 也能够用来搭建 k8s 集群 但是因为网络问题 只测试了如何去管理集群 还没有去 测试 安装集群. 2. 创建rancher 服务的方法 dock ...
- 一条sql语句搞定基于mysql的sql执行顺序的基本理解
对数据库基本操作是每个程序员基本功,如何理解并快速记住sql执行的顺序呢,其实一条复杂的sql就能搞定: SELECT DISTINCT <select_list> FROM <le ...
- BZOJ 3609: [Heoi2014]人人尽说江南好
3609: [Heoi2014]人人尽说江南好 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 470 Solved: 336[Submit][Sta ...
- 【BZOJ1082】[SCOI2005]栅栏(搜索)
[BZOJ1082][SCOI2005]栅栏(搜索) 题面 BZOJ 洛谷 题解 随便写个爆搜,洛谷上就\(80\)分了.先放爆搜代码: #include<iostream> #inclu ...
- luogu1084 [NOIp2012]疫情控制 (二分答案+倍增+dfs序)
先二分出一个时间,把每个军队倍增往上跳到不能再跳 然后如果它能到1号点,就记下来它跳到1号点后剩余的时间:如果不能,就让它就地扎根,记一记它覆盖了哪些叶节点(我在这里用了dfs序+差分,其实直接dfs ...
- 未处理的异常 stack overflow
今天在编译程序时遇到“0x00e304f7 处有未经处理的异常: 0xC00000FD: Stack overflow”的错误,也就是栈溢出了,google了一下,原来是我申请的一个变量太大了,con ...
- C/C++ exception类
#include <iostream> #include <iomanip> #include <string> #include <sstream> ...