java socket 编程 服务器一直监听

转载地址:http://haohaoxuexi.iteye.com/blog/1979837


服务器端Server

package com.jeiao.socket;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.net.ServerSocket;
import java.net.Socket;

public class Server {
	 
	   public static void main(String args[]) throws IOException {
	      //为了简单起见,所有的异常信息都往外抛
	      int port = 8899;
	      //定义一个ServerSocket监听在端口8899上
	      ServerSocket server = new ServerSocket(port);
	      while (true) {
	         //server尝试接收其他Socket的连接请求,server的accept方法是阻塞式的
	         Socket socket = server.accept();
	         //每接收到一个Socket就建立一个新的线程来处理它
	         new Thread(new Task(socket)).start();
	      }
	   }
	   
	   /**
	    * 用来处理Socket请求的
	    */
	   static class Task implements Runnable {
	 
	      private Socket socket;
	      
	      public Task(Socket socket) {
	         this.socket = socket;
	      }
	      
	      public void run() {
	         try {
	            handleSocket();
	         } catch (Exception e) {
	            e.printStackTrace();
	         }
	      }
	      
	      /**
	       * 跟客户端Socket进行通信
	      * @throws Exception
	       */
	      private void handleSocket() throws Exception {
	         BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream(), "GBK"));
	         StringBuilder sb = new StringBuilder();
	         String temp;
	         int index;
	         while ((temp=br.readLine()) != null) {
	            System.out.println(temp);
	            if ((index = temp.indexOf("eof")) != -1) {//遇到eof时就结束接收
	             sb.append(temp.substring(0, index));
	                break;
	            }
	            sb.append(temp);
	         }
	         System.out.println("客户端: " + sb);
	         //读完后写一句
	       Writer writer = new OutputStreamWriter(socket.getOutputStream(), "UTF-8");
	         writer.write("你好,客户端。");
	         writer.write("eof\n");
	         writer.flush();
	         writer.close();
	         br.close();
	         socket.close();
	      }
	   }
	}

客户端Client

package com.jeiao.socket;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.net.Socket;
import java.net.SocketTimeoutException;

public class Client {
	 
	   public static void main(String args[]) throws Exception {
	      //为了简单起见,所有的异常都直接往外抛
	     String host = "127.0.0.1";  //要连接的服务端IP地址
	     int port = 8899;   //要连接的服务端对应的监听端口
	     //与服务端建立连接
	     Socket client = new Socket(host, port);
	      //建立连接后就可以往服务端写数据了
	     Writer writer = new OutputStreamWriter(client.getOutputStream(), "GBK");
	      writer.write("你好,服务端。");
	      writer.write("eof\n");
	      writer.flush();
	      //写完以后进行读操作
	     BufferedReader br = new BufferedReader(new InputStreamReader(client.getInputStream(), "UTF-8"));
	      //设置超时间为10秒
	     client.setSoTimeout(10*1000);
	      StringBuffer sb = new StringBuffer();
	      String temp;
	      int index;
	      try {
	         while ((temp=br.readLine()) != null) {
	            if ((index = temp.indexOf("eof")) != -1) {
	                sb.append(temp.substring(0, index));
	                break;
	            }
	            sb.append(temp);
	         }
	      } catch (SocketTimeoutException e) {
	         System.out.println("数据读取超时。");
	      }
	      System.out.println("服务端: " + sb);
	      writer.close();
	      br.close();
	      client.close();
	   }
	}



  • 4
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
提供的源码资源涵盖了Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!
Java socket编程是一种用于在计算机网络中进行通信的编程技术。它基于TCP/IP协议,允许不同计算机之间的进程通过网络进行数据传输。 要使用Java socket编程,你需要使用Java提供的Socket类和ServerSocket类。Socket类用于创建客户端套接字,而ServerSocket类用于创建服务器套接字。 以下是一个简单的示例,展示了如何使用Java socket编程创建一个简单的客户端和服务器服务器端代码: ```java import java.io.*; import java.net.*; public class Server { public static void main(String[] args) { try { // 创建ServerSocket对象,监听指定的端口 ServerSocket serverSocket = new ServerSocket(12345); // 等待客户端连接 System.out.println("等待客户端连接..."); Socket clientSocket = serverSocket.accept(); // 获取输入流,用于接收客户端发送的数据 InputStream inputStream = clientSocket.getInputStream(); BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream)); // 获取输出流,用于向客户端发送数据 OutputStream outputStream = clientSocket.getOutputStream(); BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(outputStream)); // 从客户端接收数据,并向客户端发送响应 String message = reader.readLine(); System.out.println("接收到客户端消息:" + message); String response = "Hello, client!"; writer.write(response); writer.newLine(); writer.flush(); // 关闭连接 clientSocket.close(); serverSocket.close(); } catch (IOException e) { e.printStackTrace(); } } } ``` 客户端代码: ```java import java.io.*; import java.net.*; public class Client { public static void main(String[] args) { try { // 创建Socket对象,指定服务器的IP地址和端口 Socket socket = new Socket("localhost", 12345); // 获取输入流,用于接收服务器发送的数据 InputStream inputStream = socket.getInputStream(); BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream)); // 获取输出流,用于向服务器发送数据 OutputStream outputStream = socket.getOutputStream(); BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(outputStream)); // 向服务器发送数据,并接收服务器的响应 String message = "Hello, server!"; writer.write(message); writer.newLine(); writer.flush(); String response = reader.readLine(); System.out.println("接收到服务器消息:" + response); // 关闭连接 socket.close(); } catch (IOException e) { e.printStackTrace(); } } } ``` 上述示例中,服务器端创建了一个ServerSocket对象,并监听指定的端口(这里是12345)。客户端创建一个Socket对象,指定服务器的IP地址和端口。服务器端通过accept()方法等待客户端的连接,并利用输入输出流进行数据的读取和写入。客户端通过输入输出流与服务器进行通信。 这只是一个简单的示例,你可以根据需要扩展和改进这些代码来满足你的实际需求。希望对你有所帮助!如果你有任何疑问,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值