//////////////////////////////////////////////////////////通过字节流获得数据
public class SocketClient {
private static String encoding = "GBK";
public static void main(String[] args) {
SocketClient c = new SocketClient();
c.getInfo("A2", "00000058");
System.exit(0);
// StringBuffer sb = new StringBuffer();
// sb.append("{1:001,2:a0045,");
// sb.delete(sb.length() - 1, sb.length());
// System.out.println(sb.toString());
}
/**
* 获得消息
*
* @param 终端号
* @return
*/
public String getInfo(String queryA, String zdNum) {
System.out.println(">>>>>>>>>>>>>" + zdNum);
String str = "";
Socket socket = null;
try {
socket = new Socket("192.168.18.17", 8007);
socket.setSoTimeout(200000);
// 向服务器端第一次发送字符串
OutputStreamWriter osw = new OutputStreamWriter(socket.getOutputStream());
// 向服务器端第二次发送字符串
String strMili = queryA + "|07|123456||||" + zdNum;
// String strMili = "A1|07|123456||||00000058";
System.out.println("发送命令>>" + strMili);
// doc.writeUTF("A1|07|123456||||00000058");//这个会自动加长度
osw.write(strMili);
osw.flush();
DataInputStream input = new DataInputStream(socket.getInputStream());
byte[] buffer;
do{
buffer = new byte[input.available()];
if (buffer.length != 0){
break;
}
}while(true);
buffer = new byte[input.available()];
if (buffer.length != 0) {
System.out.println("length=" + buffer.length);
// 读取缓冲区
input.read(buffer);
// 转换字符串
str = new String(buffer);
System.out.println("内容=" + str);
}
// DataInputStream input = new
// DataInputStream(socket.getInputStream());
// System.out.println("dataInputStream=" + input.readLine());
// BufferedReader bufferReader = new BufferedReader(new
// InputStreamReader(socket.getInputStream()));
// System.out.println("bufferReader=" + bufferReader.readLine());
// 装饰流BufferedReader封装输入流(接收客户端的流)
// BufferedInputStream bis = new
// BufferedInputStream(socket.getInputStream());
//
// DataInputStream dis = new DataInputStream(bis);
// byte[] bytes = new byte[1]; // 一次读取一个byte
// String ret = "";
// while (dis.read(bytes) != -1) {
// ret += bytesToHexString(bytes) + " ";
// if (dis.available() == 0) { // 一个请求
// doSomething(ret);
// }
// }
} catch (UnknownHostException e) {
System.out.println("找不到主机");
e.printStackTrace();
} catch (IOException e) {
System.out.println("IO出错");
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
if (socket != null) {
try {
socket.close();
} catch (IOException e) {
System.out.println("关闭socket_IO出错");
}
}
return str;
}
public static void doSomething(String ret) {
System.out.println(ret);
}
public static String bytesToHexString(byte[] src) {
StringBuilder stringBuilder = new StringBuilder("");
if (src == null || src.length <= 0) {
return null;
}
for (int i = 0; i < src.length; i++) {
int v = src[i] & 0xFF;
String hv = Integer.toHexString(v);
if (hv.length() < 2) {
stringBuilder.append(0);
}
stringBuilder.append(hv);
}
return stringBuilder.toString();
}
}
////////////////////////////////////////////////////////////常规客户端和服务端
public class SocketClient {
public static void main(String[] args) {
Socket socket = null;
try {
socket = new Socket("127.0.0.1", 8007);
// 向服务器端第一次发送字符串
OutputStream netOut = socket.getOutputStream();
DataOutputStream doc = new DataOutputStream(netOut);
DataInputStream in = new DataInputStream(socket.getInputStream());
// 向服务器端第二次发送字符串
doc.writeUTF("A1|07|123456||||00000058");
String res = in.readUTF();
System.out.println("接收:"+res);
//doc.writeUTF("A1|01|cdyh123456|||LGK|01110109");
//res = in.readUTF();
//System.out.println("接收:"+res);
doc.close();
in.close();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
if (socket != null) {
try {
socket.close();
} catch (IOException e) {
}
}
}
}
public class SocketManager {
private int port = 8007;
/**
* @param args
* @throws IOException
*/
public static void main(String[] args) {
SocketManager manager = new SocketManager();
manager.doListen();
}
public void doListen() {
ServerSocket server;
try {
server = new ServerSocket(port);
//while (true) {
Socket client = server.accept();
new Thread(new SSocket(client)).start();
//}
} catch (IOException e) {
e.printStackTrace();
}
}
// 服务器进程
class SSocket implements Runnable {
Socket client;
public SSocket(Socket client) {
this.client = client;
}
public void run() {
DataInputStream input;
DataOutputStream output;
try {
input = new DataInputStream(client.getInputStream());
output = new DataOutputStream(client.getOutputStream());
//
String listMsg = input.readUTF();//接收
System.out.println("接收: " + listMsg);
output.writeUTF("A1|00|01|060100099|李良义|正常|0.00|0.00|集资二号楼三单元402|||是|否");
listMsg = input.readUTF();//接收
System.out.println("第二次接收: " + listMsg);
output.writeUTF("A1|00|01|01110109|杨立明|正常|0.00|0.00|麻纺厂西街4号楼2单元206|||否|否");
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
相关推荐
Java Socket远程执行任务是一种通过网络通信在客户端与服务器之间实现命令传递和执行的技术。在这个例子中,客户端将命令和一个名为"FindWordCount.jar"的Java可执行文件发送到服务器,然后服务器执行这个jar包并...
在这个场景中,我们讨论的是如何使用Java Socket来实现实时的屏幕监控功能,即服务端能够远程查看客户端的屏幕内容,这样的功能在远程协助、监控或者演示场景中非常有用。 首先,我们需要了解Java Socket的基本概念...
总的来说,Java的Socket类是实现网络通信的基础,通过创建Socket实例,我们可以与远程服务器建立连接,进行数据的发送和接收。了解和熟练掌握Socket类的使用,对于编写任何基于TCP协议的网络应用程序都是至关重要的...
Java Socket是Java编程语言中实现网络通信的基础组件,它提供了应用程序与网络协议的接口,使得开发者可以构建基于TCP(传输控制协议)或UDP(用户数据报协议)的应用程序。本教程将深入探讨Java Socket编程的核心...
3.远程教育:使用 Java Socket 编程可以实现远程教育中的实时通信和数据传输。 四、Java Socket 编程的优点 Java Socket 编程有许多优点,例如: 1. 可靠性高:Java Socket 编程基于 TCP/IP 协议,提供了可靠的...
在实际应用中,Java Socket编程可以用于实现聊天应用、文件传输、远程控制等多种功能。为了增强安全性,可以使用SSL/TLS套接字(`SSLSocket`和`SSLServerSocket`)来提供加密的通信。同时,考虑到多线程或多进程的...
Java套接字编程是网络通信的核心技术之一,它允许Java应用程序之间或应用程序与远程服务器之间的双向数据传输。本文将深入探讨Java Socket编程的基础知识、关键概念以及如何在实践中应用。 一、Socket概述 Socket,...
Java Socket编程是网络编程的基础,它提供了在两个应用程序之间建立通信的途径。在这个"一个简单的java socket程序"中,我们将会探讨如何构建一个基础的服务器端(Server)和客户端(Client)模型,这对于初学者来说...
在Java Socket网络五子棋中,需要定义一套简单的协议来封装和解析游戏数据。例如,每个消息可能包含以下字段:玩家ID、棋盘位置、操作类型(落子或请求结束)等。这些字段以特定格式编码(如JSON或自定义二进制格式...
在Java中,Socket提供了低级别的、基于连接的、面向数据流的通信API,可以用于实现客户端-服务器架构的应用程序。以下是关于Java Socket通信实现的详细知识点: 1. **Socket基础**: - **Socket类**:Java中的`...
Java中的Socket类代表了TCP/IP协议中的套接字,它是连接到特定远程主机上的端口。Socket类提供了建立连接、发送数据和接收数据的方法。 2. **ServerSocket类**: 对于服务器端,我们使用ServerSocket类来监听特定...
Java Socket 是 Java 语言中用于实现网络编程的 API,通过 Socket,可以实现与远程服务器的通信。在这里,我们将使用 Java Socket 实现 SMTP 协议来发送邮件。 SMTP 协议简介 SMTP(Simple Mail Transfer Protocol...
Java Socket学习是Java网络编程的重要组成部分,主要用于实现进程间的网络通信。Socket在计算机网络中扮演着数据传输的桥梁角色,它允许两个网络上的程序通过网络进行数据交换。在这个基础学习代码中,我们将深入...
Java使用传统Socket手写的远程RPC(Remote Procedure Call)框架是一种实现分布式系统中不同节点间通信的技术。RPC允许一个程序在不关心远程系统具体实现的情况下,调用另一个远程系统的功能,就像是调用本地方法...
Java Socket远程调用Shell是一种通过Java程序利用Socket通信协议实现对远程服务器的Shell命令执行的技术。这种方式常用于系统管理、自动化运维或者分布式系统的组件交互。下面将详细介绍这一技术的实现原理、步骤...
Java可以通过`HttpURLConnection`或第三方库如Spring的RestTemplate、Feign等来调用RESTful API,获取JSON或XML格式的远程数据。 5. **JSON与XML解析**:当远程数据以JSON或XML格式返回时,Java需要解析这些数据...
在Java中,`java.net.Socket`类代表一个TCP连接,它提供了发送和接收数据的方法。创建一个Socket实例需要指定服务器的IP地址和端口号。例如: ```java Socket socket = new Socket("192.168.1.100", 12345); ``` ...
总之,Java Socket编程是构建网络应用程序的关键技术,它使得两个远程程序能够相互通信。了解并掌握如何创建和管理Socket连接,以及如何有效地传输数据,对于任何希望涉足网络编程的Java开发者来说都是至关重要的。