`
pengjianf_ah
  • 浏览: 8557 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

java socket回显服务

阅读更多
根据java tcp/ip编程学习记录  java socket实现回显服务
逻辑比较简单直接代码记录
1.客户端
package com.pjf.echodemo;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.util.Scanner;

public class EchoClient {

	public static void main(String[] args) {
		Socket socket = null;
		InputStream sockIn = null;// 读取
		OutputStream sockOut = null;// 输出流

		try {
			socket = new Socket("localhost", 6666);
			/**
			 * 获取网络输入输出流的实例
			 */
			sockIn = socket.getInputStream();
			sockOut = socket.getOutputStream();

			// 从控制台读取
			Scanner console = new Scanner(System.in);
			String context = null;// 控制台去读内容
//			byte[] readBytes = new byte[64];
			int length=0;
			while (true) {
				context = console.nextLine();
//				限制输入内容大小
//				if(context.getBytes().length>64){
//					System.out.println("输入数据过长无法发送,请缩短内容");
//					continue;
//				}
				length=context.getBytes().length;
				sockOut.write(context.getBytes());
				sockOut.flush();
				
				//sockIn.read(readBytes, 0, context.getBytes().length);
				int rec_len=0;//收到返回消息的长度
				int rec_total_len=0;//收到返回消息的总长度
				byte[] rev_data=new byte[length];
				//读取判断,防止服务端拆分
				while(rec_total_len<length){
					rec_len=sockIn.read(rev_data,rec_total_len,length-rec_total_len);
					if(rec_len==-1){
						break;
					}
					rec_total_len+=rec_len;
					
				}
				System.out.println("客户端:"+new String(rev_data, 0, length));
				if (context == null || context == "" || context.equalsIgnoreCase("exit")) {
					break;
				}

			}
			System.out.println("结束了,goodbye!!!");

		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			if (socket != null) {
				if (!socket.isClosed()) {
					try {
						socket.close();
					} catch (IOException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
				}
				socket = null;

			}

			if (sockIn != null) {

				socket = null;

			}

			if (sockOut != null) {

				sockOut = null;

			}

		}

	}

}


2.服务端端:
package com.pjf.echodemo;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class EchoServer {

	public static void main(String[] args) {
		ServerSocket ss = null;
		Socket socket = null;
		InputStream inStream = null;
		OutputStream outStream = null;

		try {
			ss = new ServerSocket(6666);
			System.out.println("服务端启动成功=================================");
			while (true) {
				socket = ss.accept();
				System.out.println(
						"客户端接收成功" + socket.getLocalAddress().getHostName() + "=================================");
				byte[] revdata = new byte[16];
				inStream = socket.getInputStream();
				outStream = socket.getOutputStream();

				int len = 0;
				//没有关闭连接则一直读取
				while ((len = inStream.read(revdata)) != -1) {

					System.out.println("服务端收到:" + new String(revdata, 0, len));
					outStream.write(revdata, 0, len);

				}

				if (outStream != null) {
					outStream = null;
				}

				if (inStream != null) {
					inStream = null;
				}

				if (socket != null) {
					if (!socket.isClosed()) {
						try {
							socket.close();
						} catch (IOException e) {
							// TODO Auto-generated catch block
							e.printStackTrace();
						}
					}
				}
			}

		} catch (IOException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		} finally {
			if (ss != null) {
				if (!ss.isClosed()) {
					try {
						ss.close();
					} catch (IOException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
				}
			}
		}

	}
}



3.由于客户端知道发送的长度,可以等待服务端返回这些内容,进行相应的打印,服务端不知道长度,在服务打印可能都是分开,这个后面可能通过定长编码或者分隔符进行解决,或者每次发送限度不长度


4.存在以下问题:只能够单个socket访问,读写相互堵塞...


5.上面的问题根据后面的章节可以补充....
0
0
分享到:
评论

相关推荐

    java socket通讯程序源码

    Java Socket通信程序源码是Java网络编程中一个重要的学习领域,它主要用于实现两台计算机之间的数据传输。在Java中,Socket是基于TCP/IP协议的一种低级通信机制,它提供了进程间网络通信的能力。本篇文章将深入探讨...

    Java Socket学习---多线程阻塞

    在Java编程中,Socket是网络通信的基础,它允许两个网络应用程序之间进行数据交换。本教程主要探讨的是如何在Java中使用Socket实现多线程阻塞式通信,这通常涉及到服务器端(EchoServer)和客户端(EchoClient)的...

    java1-echo.rar_java socket ec

    在"echo"部分,服务器端接收到客户端的消息后,不做任何处理,直接将接收到的数据通过`Socket`的`OutputStream`回送给客户端,这就是所谓的回显服务。客户端收到服务器的回应后,通常会在控制台显示出来,完成一次...

    Java基于Socket实现简单的多线程回显服务器功能示例

    在这个示例中,我们将探讨如何使用Java的Socket类和多线程技术来创建一个简单的回显服务器。回显服务器是一种接收客户端发送的数据并将其原样返回的服务器。 首先,我们来看`EchoServer`类,它是服务器端的核心。`...

    Java Socket学习---nio实现阻塞多线程通信

    接下来是`EchoClient.java`,它是回显服务的客户端部分。客户端也需要创建一个`SocketChannel`,并可能注册到`Selector`,但通常客户端的并发需求不如服务器高,因此可能不使用`Selector`,而是直接通过`...

    Java Socket编程实现UDP网络测试

    Java Socket编程实现UDP网络测试是计算机网络领域中的一个重要实践,主要涉及到Java编程语言以及网络通信协议UDP(User Datagram Protocol)。Socket在计算机网络中扮演着桥梁的角色,它允许应用程序通过网络发送和...

    一篇介绍 Java Socket 编程的经典文章

    Java Socket 编程是Java网络编程的基础,它允许两台计算机通过网络进行通信。Socket是TCP/IP协议族的一部分,提供了在网络中建立、管理和维护通信连接的接口。在Java中,Socket编程涉及到的主要类和接口存在于`java...

    Socket-TCP-Echo.rar_java tcp socket_tcp server java

    Socket编程是Java中实现网络通信的核心机制,主要应用于TCP协议,它允许两个远程应用程序通过互联网交换数据。在本示例中,“Socket-TCP-Echo.rar”包含了一个简单的TCP服务器和客户端程序,用于演示如何使用Java...

    java_socket服务端和客户端编程

    Java Socket服务端与客户端编程是Java网络编程中的基础部分,主要用于实现两台计算机之间的通信。在本场景中,客户端向服务器发送一个字符串,服务器接收到这个字符串后将其转化为大写并回显。以下是对这个过程的...

    基于socket实现Ping功能的源代码

    通过阅读和分析这个文件,你可以看到如何在实际代码中设置Socket选项,打开SOCK_RAW套接字,构造和发送ICMP报文,以及解析并响应收到的ICMP回显应答。 总之,基于Socket实现Ping功能的源代码是一个很好的学习资源,...

    linux下java反序列化通杀回显方法的低配版实现 - 先知社区1

    该文章提出了一个思路,即通过Java反序列化执行Java代码和系统命令来获取发起请求时服务端的socket文件描述符,然后在该文件描述符中写入回显内容。这种方法与Shiro的非典型回显机制非常相似。 实现这个技术的关键...

    SimpleEchoServer:一个用Java编写的简单回显服务器

    【Java简单回显服务器——SimpleEchoServer】 SimpleEchoServer是一个基于Java编程语言实现的简易回显服务器。在计算机网络中,回显服务器是一种常见的服务,它接收客户端发送的数据,并原封不动地返回给客户端,...

    Socket通讯解决并发采用线程池

    在服务器端,`EchoServer`通常监听指定端口,接收到客户端连接请求后,创建一个新线程(这里由线程池提供)来处理该连接,发送回客户端的数据与接收到的数据相同,即“回显”服务。客户端`EchoClient`则向服务器发送...

    javaSocket.pdf

    Java Socket 编程是 Java 网络编程中的一项核心技术,它允许不同的计算机上的程序相互通信。本章节将详细介绍 Java Socket 编程的基础和进阶知识,以及基于 Java NIO 的新网络模型。 第1章简介 在第一章中,作者...

    使用Java实现简单的server/client回显功能的方法介绍

    实现回显服务的核心在于创建服务器端和客户端的Socket实例。服务器端通常会监听一个特定的端口(在这个例子中是990),等待客户端的连接请求。一旦客户端发起连接,服务器就会接受连接并创建一个新的Socket实例,...

    Java 的Socket支持功能所做的服务器和客户端的实例 2011 05 30

    ### Java的Socket支持功能所做的服务器和客户端的实例 本文将详细介绍一个基于Java的Net包开发的多线程Client/Server通讯程序。此程序主要具备以下功能: 1. **服务器能够以线程的方式响应客户端的请求**。 2. **...

    Java网络开发相关源码

    在提供的源码中,`SocksEcho.java`可能是一个实现Socket回显服务器的示例。回显服务器会接收到的数据原封不动地返回给客户端,这常用于测试网络连接和数据传输。`SocksEcho.gif`可能是对这个功能的简单可视化表示,...

    java服务端scoket通信代码

    Java服务器端Socket通信是网络编程中的基础部分,主要用于实现客户端与服务器之间的数据交换。在这个场景中,提供的压缩包文件包含了实现这一功能的核心类。让我们详细探讨一下这些类以及Socket通信的相关知识点。 ...

    多线程Java_Socket编程示例

    ### 多线程Java_Socket编程示例 #### 背景与意义 在现代软件开发尤其是网络应用领域,多线程技术与Socket编程是两个非常重要的概念和技术。多线程能够有效地利用计算机资源,提高程序运行效率;而Socket编程则是...

    ssd8 ex1EchoServer.java EchoClient.java ThreadEchoServer.java

    在这个练习中,我们通常会看到如何使用Java语言来创建这样的服务器和客户端,它们通过网络进行通信,客户端发送数据,服务器接收并返回相同的数据,即“回显”操作。 首先,`EchoServer.java`文件是回显服务器的...

Global site tag (gtag.js) - Google Analytics