关于socket线程通信的一些知识整理

一般我们需要要让两台机子进行通信,需要创建一个Server 类,一个Client类,还需要创建一个线程类

server

public class Server {
 public static void main(String[] args) throws IOException {
  ServerSocket ss = new ServerSocket(8888);
  int num=0;
  System.out.println("服务器即将启动,   等待客户端启动。。。。。。");
  while (true) {
   Socket s = ss.accept();
   ServerThread t = new ServerThread(s);
   // 启动线程
   t.start();
   num++;
   InetAddress ad= InetAddress.getLocalHost();
   System.out.println(ad+"当前访问网站人数:"+num);
  }
 }

接着 接着创建Client

public class Client {
 public static void main(String[] args) throws UnknownHostException, IOException {
  Socket s=new Socket("localhost",8888);
//  获取字节输出流
//  s.geto
  OutputStream str= s.getOutputStream(); 
  PrintWriter pw=new PrintWriter(str);
  pw.write("user:admin:1112,    password:12364");
  pw.flush();
  s.shutdownOutput();
  InputStream st= s.getInputStream();
  InputStreamReader read=new InputStreamReader(st);
  BufferedReader buf=new BufferedReader(read);
  String s1=buf.readLine();
   System.out.println("我是客户端,  服务端返回相应数据:"+s1);
  buf.close();
  read.close();
  st.close();
  pw.close();
  str.close();
 }

最后创建一个线程类

public class ServerThread extends Thread{
 public ServerThread(Socket sockrt) {
  super();
  this.sockrt = sockrt;
 }
 Socket sockrt;
 public void run()
 {
  Server s=new Server();
  InputStream str = null;
  try {
   str = sockrt.getInputStream();
  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  InputStreamReader read = null;
  try {
   read = new InputStreamReader(str,"gbk");
  } catch (UnsupportedEncodingException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  BufferedReader buf=new BufferedReader(read);
  String lin = null;
  try {
   lin = buf.readLine();
  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  while(lin!=null)
  {
   System.out.println(" 我是服务器:客户端说:"+lin);
   try {
    lin=buf.readLine();
   } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }
  }
  try {
   sockrt.shutdownInput();
  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  OutputStream stream = null;
  try {
   stream = sockrt.getOutputStream();
  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  PrintWriter pw=new PrintWriter(stream);
  pw.write("欢迎您");
  pw.flush();
  pw.close();
  try {
   stream.close();
  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  try {
   read.close();
  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  try {
   str.close();
  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  try {
   sockrt.close();
  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
 }

这样既可实现多用户访问服务器

java socket线程通信的更多相关文章

  1. java socket报文通信(一)socket的建立

    java socket报文通信(一) socket的建立  今天来和大家分享一下java中如何使用socket进行通信.先来啰嗦两句,看看Tcp/ip和udp: TCP是Transfer Contro ...

  2. Java Socket线程的设计原理介绍

    转自:http://developer.51cto.com/art/201003/190001.htm Java Socket线程我们经常会用到的技术,但是有很多程序员还是有不少的使用问题,下面我们就 ...

  3. Java Socket应用---通信是这样练成的

    网络基础简介 Java 中网络相关 API 的应用     Java 中的 InetAddress 的应用   Test01.java package com.imooc; import java.n ...

  4. java多线程-线程通信

    线程通信的目标是使线程间能够互相发送信号.另一方面,线程通信使线程能够等待其他线程的信号. 通过共享对象通信 忙等待 wait(),notify()和 notifyAll() 丢失的信号 假唤醒 多线 ...

  5. Java之线程通信的方法

    /** * 线程通信的例子:使用两个线程打印 1-100.线程1, 线程2 交替打印 * * 涉及到的三个方法: * wait():一旦执行此方法,当前线程就进入阻塞状态,并释放同步监视器. * no ...

  6. java多线程——线程通信

    一.线程通信目标 1.线程通信的目标是使线程间能够互相发送信号 2.线程通信使线程能够等待其他线程的信号 二.几种方式 1.通过共享对象 2.忙等待 线程 B 运行在一个循环里,以等待信号 (不释放c ...

  7. Java之线程通信的应用:经典例题:生产者/消费者问题

    /** * 线程通信的应用:经典例题:生产者/消费者问题 * * 生产者(Productor)将产品交给店员(Clerk),而消费者(Customer)从店员处取走产品, * 店员一次只能持有固定数量 ...

  8. Java Socket编程----通信是这样炼成的

    Java最初是作为网络编程语言出现的,其对网络提供了高度的支持,使得客户端和服务器的沟通变成了现实,而在网络编程中,使用最多的就是Socket.像大家熟悉的QQ.MSN都使用了Socket相关的技术. ...

  9. java socket报文通信(三)java对象和xml格式文件的相互转换

    前两节讲了socket服务端,客户端的建立以及报文的封装.今天就来讲一下java对象和xml格式文件的相互转换. 上一节中我们列举了一个报文格式,其实我们可以理解为其实就是一个字符串.但是我们不可能每 ...

随机推荐

  1. BZOJ 3402: [Usaco2009 Open]Hide and Seek 捉迷藏

    题目 3402: [Usaco2009 Open]Hide and Seek 捉迷藏 Time Limit: 3 Sec  Memory Limit: 128 MB Description     贝 ...

  2. Roman Roulette(约瑟夫环模拟)

    Roman Roulette Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)To ...

  3. 【iOS开发-52】假设要模仿练习,怎样找到其它应用程序的icon、使用框架等资源?

    (1)在91助手等站点下载ipa格式的安装包.假设是安卓的应该是apk格式的.此处仅仅说iOS的.比方以下这个,下载到电脑. (2)然后,找到它,右击"归档",相当于解压. (3 ...

  4. swt combo 自动补全

    public class AutoCompleteComboMain {     static final Display display = new Display();     static fi ...

  5. 通过SqlHelper实现登录

    1.建立解决方案:. 首先创建windows窗体应用程序,然后拖出登录界面 2. 写配置文件App.config:     <configuration>         <conn ...

  6. [译]Stairway to Integration Services Level 4 - 增量更新数据

    在本文中, 我们说下增量更新数据:即将数据源中更新了的数据替换掉目标表中对应的数据. 更新代码 操作之前我们先把目标表e (dbo.Contact). 的数据改掉 Use AdventureWorks ...

  7. .net EF中从数据添加表或视图时无法添加的问题

    .net 使用EF模式进行开发,添加实体时不能够正常添加 错误描述: .net中在EF文件中添加数据库中已有的表或视图时不能正常添加,在添加时没有任何的错误提示,但是表或视图就一直拉不过来,,保存也没 ...

  8. Java thread中对异常的处理策略

    转载:http://shmilyaw-hotmail-com.iteye.com/blog/1881302 前言 想讨论这个话题有一段时间了.记得几年前的时候去面试,有人就问过我一个类似的问题.就是j ...

  9. Codeforces 492B B. Vanya and Lanterns

    Codeforces  492B   B. Vanya and Lanterns 题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid= ...

  10. JAVA语言的素数判断,随机数,函数调用

    近来刚学JAVA,就从JAVA写起吧,JAVA判别素数,其实方法和C/C++没什么区别,主要就是想谈一下,其中包括的3个点. (1)JAVA语言产生随机数,random函数,定义参数max的作用是给出 ...