根据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.上面的问题根据后面的章节可以补充....
分享到:
相关推荐
Java Socket通信程序源码是Java网络编程中一个重要的学习领域,它主要用于实现两台计算机之间的数据传输。在Java中,Socket是基于TCP/IP协议的一种低级通信机制,它提供了进程间网络通信的能力。本篇文章将深入探讨...
在Java编程中,Socket是网络通信的基础,它允许两个网络应用程序之间进行数据交换。本教程主要探讨的是如何在Java中使用Socket实现多线程阻塞式通信,这通常涉及到服务器端(EchoServer)和客户端(EchoClient)的...
在"echo"部分,服务器端接收到客户端的消息后,不做任何处理,直接将接收到的数据通过`Socket`的`OutputStream`回送给客户端,这就是所谓的回显服务。客户端收到服务器的回应后,通常会在控制台显示出来,完成一次...
在这个示例中,我们将探讨如何使用Java的Socket类和多线程技术来创建一个简单的回显服务器。回显服务器是一种接收客户端发送的数据并将其原样返回的服务器。 首先,我们来看`EchoServer`类,它是服务器端的核心。`...
接下来是`EchoClient.java`,它是回显服务的客户端部分。客户端也需要创建一个`SocketChannel`,并可能注册到`Selector`,但通常客户端的并发需求不如服务器高,因此可能不使用`Selector`,而是直接通过`...
Java Socket编程实现UDP网络测试是计算机网络领域中的一个重要实践,主要涉及到Java编程语言以及网络通信协议UDP(User Datagram Protocol)。Socket在计算机网络中扮演着桥梁的角色,它允许应用程序通过网络发送和...
Java Socket 编程是Java网络编程的基础,它允许两台计算机通过网络进行通信。Socket是TCP/IP协议族的一部分,提供了在网络中建立、管理和维护通信连接的接口。在Java中,Socket编程涉及到的主要类和接口存在于`java...
Socket编程是Java中实现网络通信的核心机制,主要应用于TCP协议,它允许两个远程应用程序通过互联网交换数据。在本示例中,“Socket-TCP-Echo.rar”包含了一个简单的TCP服务器和客户端程序,用于演示如何使用Java...
Java Socket服务端与客户端编程是Java网络编程中的基础部分,主要用于实现两台计算机之间的通信。在本场景中,客户端向服务器发送一个字符串,服务器接收到这个字符串后将其转化为大写并回显。以下是对这个过程的...
通过阅读和分析这个文件,你可以看到如何在实际代码中设置Socket选项,打开SOCK_RAW套接字,构造和发送ICMP报文,以及解析并响应收到的ICMP回显应答。 总之,基于Socket实现Ping功能的源代码是一个很好的学习资源,...
该文章提出了一个思路,即通过Java反序列化执行Java代码和系统命令来获取发起请求时服务端的socket文件描述符,然后在该文件描述符中写入回显内容。这种方法与Shiro的非典型回显机制非常相似。 实现这个技术的关键...
【Java简单回显服务器——SimpleEchoServer】 SimpleEchoServer是一个基于Java编程语言实现的简易回显服务器。在计算机网络中,回显服务器是一种常见的服务,它接收客户端发送的数据,并原封不动地返回给客户端,...
在服务器端,`EchoServer`通常监听指定端口,接收到客户端连接请求后,创建一个新线程(这里由线程池提供)来处理该连接,发送回客户端的数据与接收到的数据相同,即“回显”服务。客户端`EchoClient`则向服务器发送...
Java Socket 编程是 Java 网络编程中的一项核心技术,它允许不同的计算机上的程序相互通信。本章节将详细介绍 Java Socket 编程的基础和进阶知识,以及基于 Java NIO 的新网络模型。 第1章简介 在第一章中,作者...
实现回显服务的核心在于创建服务器端和客户端的Socket实例。服务器端通常会监听一个特定的端口(在这个例子中是990),等待客户端的连接请求。一旦客户端发起连接,服务器就会接受连接并创建一个新的Socket实例,...
### Java的Socket支持功能所做的服务器和客户端的实例 本文将详细介绍一个基于Java的Net包开发的多线程Client/Server通讯程序。此程序主要具备以下功能: 1. **服务器能够以线程的方式响应客户端的请求**。 2. **...
在提供的源码中,`SocksEcho.java`可能是一个实现Socket回显服务器的示例。回显服务器会接收到的数据原封不动地返回给客户端,这常用于测试网络连接和数据传输。`SocksEcho.gif`可能是对这个功能的简单可视化表示,...
Java服务器端Socket通信是网络编程中的基础部分,主要用于实现客户端与服务器之间的数据交换。在这个场景中,提供的压缩包文件包含了实现这一功能的核心类。让我们详细探讨一下这些类以及Socket通信的相关知识点。 ...
### 多线程Java_Socket编程示例 #### 背景与意义 在现代软件开发尤其是网络应用领域,多线程技术与Socket编程是两个非常重要的概念和技术。多线程能够有效地利用计算机资源,提高程序运行效率;而Socket编程则是...
在这个练习中,我们通常会看到如何使用Java语言来创建这样的服务器和客户端,它们通过网络进行通信,客户端发送数据,服务器接收并返回相同的数据,即“回显”操作。 首先,`EchoServer.java`文件是回显服务器的...