Java Socket构建阻塞的TCP通信

1.服务器端

1.创建ServerSocket对象,可在构造子中指定监听的端口;

private int port = 8000;
private ServerSocket serverSocket;
……
serverSocket = new ServerSocket(port);

2.服务器端调用ServerSocket对象的accept()方法,该方法一直监听端口,等待客户的连接请求,如 果接收到一个连接请求,accept()方法就会返回一个Socket对象,这个Socket对象与客户端的Socket对象 将形成一条通信线路;

Socket socket = null;
socket = serverSocket.accept(); // 等待客户连接

3.Socket类提供了getInputStream()方法和getOutputStream()方法。

InputStream socketIn = socket.getInputStream();

OutputStream socketOut = socket.getOutputStream();

源代码EchoServer.java

public class EchoServer {
   private int port = 8000;
   private ServerSocket serverSocket;
   public EchoServer() throws IOException {
    serverSocket = new ServerSocket(port);
    System.out.println("Server Start");
   }
   public String echo(String msg) {
    return "echo:" + msg;
   }
   private PrintWriter getWriter(Socket socket) throws IOException {
    OutputStream socketOut = socket.getOutputStream();
    return new PrintWriter(socketOut, true);
   }
   private BufferedReader getReader(Socket socket) throws IOException {
    InputStream socketIn = socket.getInputStream();
    return new BufferedReader(new InputStreamReader(socketIn));
   }
   public void service() {
    while (true) {
      Socket socket = null;
      try {
        socket = serverSocket.accept(); // 等待客户连接
        System.out.println("New connection accepted "
           + 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(echo(msg));
          if (msg.equals("bye")) // 如果客户发送的消息为“bye”,就结束通信
           break;
        }
      } catch (IOException e) {
        e.printStackTrace();
      } finally {
        try {
          if (socket != null)
           socket.close(); // 断开连接
        } catch (IOException e) {
          e.printStackTrace();
        }
      }
    }
   }
   public static void main(String args[]) throws IOException {
    new EchoServer().service();
   }
}

时间: 2025-01-02 18:40:21

Java Socket构建阻塞的TCP通信的相关文章

java网络编程-java socket实现两台电脑通信

问题描述 java socket实现两台电脑通信 大学生 菜鸟一个 现在自己电脑创了 发送端,接收端,可行 然后同样的代码,将发送端目的ip改为宿舍一台电脑ip,就没反应了.怎么回事啊? 防火墙吗?还是ip地址不对.两台机一个网,一个是192.168.1.102,一台是103 解决方案 没反应是什么意思,指发送端? 解决方案二: 原因很多..硬件软件的可能性都有. 都会在中间阻止或者消亡http请求..最好把你的代码,和网络环境说一下. 解决方案三: 端口看看有没有被占用吧 解决方案四: 试试

java socket 客户端和服务器端互相通信(聊天)

客户端: package com.lzx.socket; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.Socket; public class SocketClient { public static void main(String[] args) throws IO

java socket为啥不阻塞

问题描述 java socket为啥不阻塞 package pack1; import java.io.*; import java.net.ServerSocket;i mport java.net.Socket; public class Servers { public static void main(String[] args) { // TODO Auto-generated method stub try { ServerSocket s=new ServerSocket(8888

JAVA Socket超时浅析(转)

  套接字或插座(socket)是一种软件形式的抽象,用于表达两台机器间一个连接的"终端".针对一个特定的连接,每台机器上都有一个"套接字",可以想象它们之间有一条虚拟的"线缆".JAVA有两个基于数据流的套接字类:ServerSocket,服务器用它"侦听"进入的连接:Socket,客户端用它初始一次连接.侦听套接字只能接收新的连接请求,不能接收实际的数据包.   套接字是基于TCP/IP实现的,它是用来提供一个访问TCP的

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

Java最初是作为网络编程语言出现的,其对网络提供了高度的支持,使得客户端和服务器的沟通变成了现实,而在网络编程中,使用最多的就是Socket.像大家熟悉的QQ.MSN都使用了Socket相关的技术.下面就让我们一起揭开Socket的神秘面纱. Socket编程 一.网络基础知识(参考计算机网络) 关于计算机网络部分可以参考相关博客: TCP/IP协议栈及OSI参考模型详解> http://wangdy.blog.51cto.com/3845563/1588379 1.两台计算机间进行通讯需要以

android 开发 java写的 tcp 通信库,注册选择器时异常!跪求java高手指点!!!

问题描述 android 开发 java写的 tcp 通信库,注册选择器时异常!跪求java高手指点!!! public void initialize() throws IOException { boolean done = false; try { Log.e(TAG,"SocketChannel.open:IP:["+hostIp+"Port:"+hostListenningPort+"]."); // 打开监听信道并设置为非阻塞模式 s

java socket长连接中解决read阻塞的3个办法_java

解决的方法有3个 : 1 约定发送的数据长度,比如 http的 keepAlive 就是必须依赖这个的 Content-Length 2 设置超时的时间,根据我的经验,只有在Socket级别设置才有效. 复制代码 代码如下: Socket socket = new Socket(host,port); socket.setSoTimeout(100); // 如果超过100毫秒还没有数据,则抛出 SocketTimeoutException 3 让发送端发送完数据后,关闭连接. 这个在Http的

Java写TCP通信程序的关闭问题

问题描述 在写TCP通信程序时,Java或者C++都会遇到端口无法迅速释放的问题,即在关闭时可能会出现Close_Wait,Time_Wait,Fin_wait_1,Fin_wait_1这四种状态,但是如何修正或者避免这些问题呢???始终没有找到方法.希望大牛们帮帮小弟 解决方案 解决方案二:不懂up解决方案三:貌似java操作不了那么底层吧解决方案四:谢谢解决方案五:2楼但是确实存在这个问题啊,比如一个apache的web服务器,如果有很多client接进来,但是关闭的时候,许多端口都成了cl

TCP通信socket异步,客户端报异常:目标主机积极拒绝

问题描述 TCP通信socket异步,客户端报异常:目标主机积极拒绝 服务端只监听时,客户端建立1500个连接请求都可以正常建立连接,但当服务端改成建立连接后触发一个事件给客户端发送数据时,客户端异常:目标主机积极拒绝,只能建立部分连接.是何原因,希望有老师可以指点一下.不胜感激!! 解决方案 Socket(Tcp)通信客户端 解决方案二: 客户端接收的数据是否正确处理,然后就是看一下你服务器发送数据给客户端后,是不是关闭了连接