该服务器一次只能处理一个客户端请求;
p/**
* 利用Socket进行简单服务端与客户端连接
* 这是服务端
*/
public class EchoServer {
  private ServerSocket serverSocket;
  private int port = 8088;
  //利用构造器启动服务器
  public EchoServer()throws Exception{
    serverSocket = new ServerSocket(port);
    System.out.println("服务器已启动!");
  }
  //需要向客户端发送的短信
  private String ehco(String msg){
    return "echo:"+msg;
  }
  //通过Socket对象获取Io输入流出
  private BufferedReader getReader(Socket socket)throws Exception{
    InputStream in = socket.getInputStream();
    //返回一个字符流对象
    return new BufferedReader(new InputStreamReader(in));
  }
  //通过Socket对象获取IO输出流
  private PrintWriter getWriter(Socket socket)throws Exception{
  OutputStream out = socket.getOutputStream();
  //自动刷新
    return new PrintWriter(out,true);
  }
  //服务器对客户端的请求进行处理
  public void service() {
  while(true){
  Socket socket = null;
  try {
    //接收客户端请求,产生socket对象进行通信
    socket = serverSocket.accept();
    System.out.println("获取客户端的url,端口"+socket.getInetAddress()+":"+socket.getPort());
    BufferedReader br = getReader(socket);
    PrintWriter pw = getWriter(socket);
    String msg = null;
    while((msg = br.readLine()) != null){
      //打印客户端消息
      System.out.println("客户端发送过来的消息:"+msg);
      //向客户端写消息
      pw.println(ehco(msg));
      if(msg.equals("bye")){
        break;
      }
  }

  }catch (Exception e){
    e.printStackTrace();
  }
  }
}

  public static void main(String[] args) throws Exception{
    //产生服务器实例,启动服务器
    EchoServer echoServer = new EchoServer();
    echoServer.service();
  }
}

---------------

客户端(单线程的)
public class EchoClient {

private int port = 8088;
private String host = "localhost";
private Socket socket;
//使用构造方法产生Socket实例
public EchoClient()throws Exception{
socket = new Socket(host,port );
}
//根据socket对象产生输出流对象
private BufferedReader getReader(Socket socket)throws Exception{
InputStream in = socket.getInputStream();
return new BufferedReader(new InputStreamReader(in));
}
//根据Socket对象产生输入流对象
private PrintWriter getWriter(Socket socket)throws Exception{
return new PrintWriter(socket.getOutputStream(),true);
}
//客户端处理方法
public void talk(){
try {
BufferedReader br = getReader(socket);
PrintWriter pw = getWriter(socket);
//控制台输入信息
BufferedReader localReader = new BufferedReader(new InputStreamReader(System.in));
String msg = null;
while((msg = localReader.readLine()) != null){
//pw.write(msg);
//不能使用write()方法,使用write()要加上println,然后flush();
//println方法中包含write()+println()方法,构造时自动刷新;
pw.println(msg);
System.out.println(br.readLine());
if(msg.equals("bye")){
break;
}
}

}catch (Exception e){
e.printStackTrace();
}
}

public static void main(String[] args) throws Exception{
EchoClient client = new EchoClient();
client.talk();
}
}

java网络编程-单线程服务端与客户端通信的更多相关文章

  1. Java网络编程(TCP服务端)

    /* * TCP服务端: * 1.创建服务端socket服务,并监听一个端口 * 2.服务端为了给客户端提供服务,获取客户端的内容,可以通过accept方法获取连接过来的客户端对象 * 3.可以通过获 ...

  2. java http post/get 服务端和客户端实现json传输

    注:本文来源于<java http post/get 服务端和客户端实现json传输> 最近需要写http post接口所以学习下. 总的还是不难直接上源码! PostHttpClient ...

  3. Netty 学习(二):服务端与客户端通信

    Netty 学习(二):服务端与客户端通信 作者: Grey 原文地址: 博客园:Netty 学习(二):服务端与客户端通信 CSDN:Netty 学习(二):服务端与客户端通信 说明 Netty 中 ...

  4. C#Winform窗体实现服务端和客户端通信例子(TCP/IP)

    Winform窗体实现服务端和客户端通信的例子,是参考这个地址 http://www.cnblogs.com/longwu/archive/2011/08/25/2153636.html 进行了一些异 ...

  5. Java网络编程:QQ邮件发送客户端程序设计

    目录 一.目标介绍 1.认识SMTP(邮件传输协议) 2.POP3(邮件接收协议) 二.基于Base64编码邮箱及授权码 1.开通QQ邮箱SMTP/POP3服务 2.Java编写BASE64编码程序 ...

  6. Java的oauth2.0 服务端与客户端的实现

    oauth原理简述 oauth本身不是技术,而是一项资源授权协议,重点是协议!Apache基金会提供了针对Java的oauth封装.我们做Java web项目想要实现oauth协议进行资源授权访问,直 ...

  7. (C#:Socket)简单的服务端与客户端通信。

    要求:1.可以完成一对一的通信:2.实现服务端对客户端一对多的选择发送:3.可以实现服务端的群发功能:4.可以实现客户端文件的发送: 要点:服务器端:第一步:用指定的端口号和服务器的ip建立一个End ...

  8. C# Socket服务端与客户端通信(包含大文件的断点传输)

    步骤: 一.服务端的建立 1.服务端的项目建立以及页面布局 2.各功能按键的事件代码 1)传输类型说明以及全局变量 2)Socket通信服务端具体步骤:   (1)建立一个Socket   (2)接收 ...

  9. java的服务端与客户端通信(1)

    一.理解socket 1.1什么是socket? socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄.应用程序通常通过"套接字"向网络 ...

随机推荐

  1. 拉格朗日乘子法&KKT条件

    朗日乘子法(Lagrange Multiplier)和KKT(Karush-Kuhn-Tucker)条件是求解约束优化问题的重要方法,在有等式约束时使用拉格朗日乘子法,在有不等约束时使用KKT条件.前 ...

  2. word转换成HTML 以及IE不兼容问题

    public static bool WordToHtml(string wordFileName, string htmlFileName) { try { Object oMissing = Sy ...

  3. HttpURLConnection与HttpClient浅析

    转自:https://blog.csdn.net/u012838207/article/details/82867701 HttpURLConnection与HttpClient浅析 1. GET请求 ...

  4. C# 读写欧姆龙(Omron)PLC ,C#使用Fins-tcp协议读写数据

      本文将使用一个gitHub开源的组件技术来读写西门子plc数据,使用的是基于以太网的TCP/IP实现,不需要额外的组件,读取操作只要放到后台线程就不会卡死线程,本组件支持超级方便的高性能读写操作 ...

  5. DAX创建带有过滤器的超链接

    在这篇文章中,我们将创建一个DAX公式,根据报表中的过滤器生成超链接. 该度量包含2个部分,第一部分是使用DAX生成目标报告的正确URL,第二部分是将过滤器传递给该报告. 浏览器支持的MAX网址长度定 ...

  6. IDEA控制台乱码解决

    打开Intellij的安装的bin目录(D:\Program Files\JetBrains\IntelliJ IDEA 14.0\bin ),找到上图的两个文件(根据你的系统是32位或64位选择其中 ...

  7. 启动tomcat报错Status 状态为 Deployment failed

  8. css文本是否换行

    关于文本换行有三个属性: white-space word-break word-wrap white-space normal 默认.空白会被浏览器忽略 pre 空白会被浏览器保留.其行为方式类似 ...

  9. hdu5001 Walk 概率DP

    I used to think I could be anything, but now I know that I couldn't do anything. So I started travel ...

  10. HttpWebRequest post 请求超时问题

    在使用curl做POST的时候, 当要POST的数据大于1024字节的时候, curl并不会直接就发起POST请求, 而是会分为俩步, 发送一个请求, 包含一个Expect:100-continue, ...