关于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. Sicily-1443

    一.      题意: 模拟队列的操作,按优先级pop.如果有元素pop,则其他在队列里面的元素的时间都要加1.如果队头的元素因为优先级不够高而要push回队列的时候,所有元素的时间都不用改变. 二. ...

  2. Qt控制台和带窗口的区别_mickelfeng_新浪博客

    Qt控制台和带窗口的区别_mickelfeng_新浪博客     t控制台和带窗口的区别    (2012-04-30 10:50:53)    标签:    杂谈        分类: C/C    ...

  3. 用Jetty和redis实现接入服务器adapter

    传统的服务器端为若干个客户端提供服务,一般需要开启多个服务器端进程.为了进一步提升服务器端的处理能力,可以如下图所示将服务解耦为两部分(adapter与workers),它们之间通过消息队列传输数据, ...

  4. hdu 3966 Aragorn's Story(树链剖分+树状数组)

    pid=3966" target="_blank" style="">题目链接:hdu 3966 Aragorn's Story 题目大意:给定 ...

  5. tomcat配置没啥难的啊

    总体上就是: 1.下载jdk并安装. 2.下载tomcat 3.分别设置好环境变量. 4.cmd java -version 如果成功,证明java jdk配置OK startup.bat 如果成功 ...

  6. CSS中的repeat

    Repeat-x是横向铺满,就是图片会横向重复,直到铺满. Repeat-y是纵向铺满,就是让图片纵向重复,直到铺满. 如果不想让重复,就直接为:no-repeat.

  7. javascript学习(9)——[设计模式]单例

    单例模式,相信大家对此都不陌生,我们主要讲下javascript中几个比较常见的设计模式: (1).普通的单体 (2).具有局部变量的强大单体 (3).惰性单体 (4).分支单体 下面我们就一一进行介 ...

  8. JBPM6教程

    JBPM6教程-手把手教你安装JBPM 1. 安装JBPM的先决条件: (1)JDK 1.6+以上,没有安装的话,猛击这里. (2)Ant 1.7+以上,没有安装的话,看看这里. 2. 下载JBPM安 ...

  9. 取出js对象的所有属性的方式

    例子: //取出事件的所有属性 $('#id_btn').bind("click dbclick mouseout",{crdx:'我是传的值'},function(e){ var ...

  10. JDBC_获取插入记录的主键值

    <span style="font-size:24px;">package src.com.JDBC2DAO.java; import static org.junit ...