`

socket编程在公交卡冲值上的应用

阅读更多
第一次把socket编程应用到实际项目中
场景就是现在很多公交车代理冲值,移动冲值那种方式
比如公交卡放到读卡器上  从电脑上操作,可以进行冲值操作
那么这里有个交互过程
第一:我们电脑里的应用程序去链接读卡器,读卡器返回给我们卡信息
第二:我们电脑里的应用程序进行卡冲值操作,把冲值命令发送给读卡器,读卡器对卡进行相应操作,然后返回操作结果给电脑的应用程序
操作完毕
这就是一个简单的socket编程实例
我把我前期写的例子贴出来,希望对大家有用:
定义一个serversocket
public class ThreadSever extends ServerSocket {

private static final int SERVER_PORT = 10000;

public ThreadSever()throws IOException {
super(SERVER_PORT);
try {
while (true) {
Socket socket = accept();
new CreateServerThread(socket);
}
}finally {
close();
}
}

class CreateServerThread extends Thread {
private Socket clientSocket;
private BufferedReader clientInputStream;
private BufferedWriter serverOutputSream;

public CreateServerThread(Socket socket) throws IOException {
clientSocket = socket;

clientInputStream = new BufferedReader(new InputStreamReader(clientSocket.getInputStream(),"GB2312"));
serverOutputSream = new BufferedWriter(new OutputStreamWriter(clientSocket.getOutputStream(),"GB2312"));
debugMessage("start accept client socket...");
start();
}

public void run() {
try {
ClientXmlObject clientXmlObject = new ClientXmlObject();
debugMessage("start read client'data...");
clientXmlObject.readAll(clientInputStream);
debugMessage("start to read client'data in server:" + clientXmlObject.getXmlToString());
debugMessage("ent to read client'data in server.");
serverOutputSream.write(createMessage());
serverOutputSream.flush();
clientInputStream.close();
serverOutputSream.close();
clientSocket.close();
} catch (IOException e) {
}
}
private String createMessage(){
return "Hello!XuGuo,How are you?";
}

private void debugMessage(String message){
System.out.println(message);
}
}

public static void main(String[] args) throws IOException {
new ThreadSever();
}
}

客户端链接程序:
public class Client {

Socket socket;
BufferedReader serverInputStream;
BufferedWriter clientOutputSream;

public Client() {
try {
socket = new Socket("127.0.0.1", 10000);
debugMessage("made a client socket...");
clientOutputSream = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream(),"GB2312"));
clientOutputSream.write("Hello!I'm client 001.");
clientOutputSream.flush();
debugMessage("writer a client'data...");
serverInputStream = new BufferedReader(new InputStreamReader(socket.getInputStream(),"GB2312"));
ServerXmlObject serverXmlObject = new ServerXmlObject();
debugMessage("read a server'data...");
serverXmlObject.readAll(serverInputStream);
System.out.println("start to read server'data in client:" + serverXmlObject.getXmlToString());
System.out.println("ent to read server'data in client.");
clientOutputSream.close();
serverInputStream.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}

private void debugMessage(String message){
System.out.println(message);
}

public static void main(String[] args) {
new Client();
}
}
两个数据操作的辅助类:
public class ClientXmlObject {

private StringBuffer sb = new StringBuffer();
private static final int STRING_BUFFER_SIZE = 5;

public void readAll(BufferedReader reader)throws IOException{
char[] charBuffer = new char[STRING_BUFFER_SIZE];
debugMessage("read server'data block...");
int hasMoreChar = reader.read(charBuffer);
String blockString = null;
if(hasMoreChar>0){
blockString = new String(charBuffer,0,hasMoreChar);
}else{
blockString = "";
}
debugMessage(blockString+"---");
debugMessage(hasMoreChar+"");
while(hasMoreChar!=-1){
sb.append(blockString);
if(sb.toString().endsWith("001.")){
break;
}
charBuffer = new char[STRING_BUFFER_SIZE];
debugMessage("read server'data block...");
hasMoreChar = reader.read(charBuffer);
if(hasMoreChar>0){
blockString = new String(charBuffer,0,hasMoreChar);
}else{
blockString = "";
}
debugMessage(blockString+"---");
debugMessage(hasMoreChar+"");
}
}

public String getXmlToString(){
return sb.toString();
}

private void debugMessage(String message){
System.out.println(message);
}
}
public class ServerXmlObject {

private StringBuffer sb = new StringBuffer();
private static final int STRING_BUFFER_SIZE = 5;

public void readAll(BufferedReader reader)throws IOException{
char[] charBuffer = new char[STRING_BUFFER_SIZE];
debugMessage("read server'data block...");
int hasMoreChar = reader.read(charBuffer);
String blockString = null;
if(hasMoreChar>0){
blockString = new String(charBuffer,0,hasMoreChar);
}else{
blockString = "";
}
debugMessage(blockString+"---");
debugMessage(hasMoreChar+"");
while(hasMoreChar!=-1){
sb.append(blockString);
if(blockString.endsWith("you?")){
break;
}
charBuffer = new char[STRING_BUFFER_SIZE];
debugMessage("read client'data block...");
hasMoreChar = reader.read(charBuffer);
if(hasMoreChar>0){
blockString = new String(charBuffer,0,hasMoreChar);
}else{
blockString = "";
}
debugMessage(blockString+"---");
debugMessage(hasMoreChar+"");
}
}

public String getXmlToString(){
return sb.toString();
}
private void debugMessage(String message){
System.out.println(message);
}

}
分享到:
评论

相关推荐

    C#raw Socket编程

    原始套接字是一种网络编程接口,允许开发者在应用层实现网络封包监视和控制。 Windows Sockets 是一种网络编程接口,实现于网络应用层,充分利用了Microsoft Windows消息驱动的特点。 C#raw Socket编程的特点: 1....

    实验一_SOCKET编程实验

    在计算机网络领域,Socket编程是一种基本的通信方式,它允许两个应用程序通过网络进行数据交换。本实验旨在帮助学生深入理解SOCKET编程的概念、原理及其实现过程,以便于掌握网络通信的核心技术。 **1. SOCKET编程...

    网络编程1Socket编程

    在Internet上,TCP/IP协议栈是最常见的网络协议,Socket编程通常基于这个协议栈进行。 **TCP(Transmission Control Protocol)** 是一种面向连接的、可靠的传输协议,它确保数据包按照正确的顺序无损地到达目的地...

    Socket编程实验报告.docx

    在实际应用中,Socket编程广泛应用于各种网络服务,如Web服务器、FTP服务器、邮件服务器等,它是实现网络应用程序间通信的关键技术。而TCP协议则保证了数据的可靠传输,确保了数据在传输过程中不会丢失或乱序。因此...

    简明Socket编程指南

    这些实验可以帮助读者更好地理解Socket编程的实际应用,并掌握如何在实际项目中运用这些技术。 - **TCP和IP通信程序设计实验**:通过实现简单的客户端与服务器通信来展示如何使用Socket进行网络数据传输。 - **实时...

    网络socket 编程指南

    《网络Socket编程指南》是一本深入探讨网络通信技术的书籍,尤其关注于Socket编程这一核心领域。Socket,作为网络通信的基础接口,是实现进程间、机器间通信的关键工具。本书旨在帮助开发者理解和掌握如何利用Socket...

    socket编程socket编程socket编程socket编程

    在编程实践中,常用的语言如C、C++、Java、Python等都提供了Socket编程的API。例如,在Java中,`java.net.Socket`类和`ServerSocket`类分别用于客户端和服务器端的编程;在Python中,可以使用`socket`模块进行操作。...

    基于TCP/IP的socket编程

    Socket编程允许应用程序通过网络发送和接收数据,它是互联网上不同计算机之间交互的核心机制。 在给定的描述中,我们看到一个创新的设计,即客户端和服务器功能的融合。通常情况下,网络通信分为两部分:服务器端,...

    VC++6.0中socket编程学习教程汇集

    Socket编程是计算机网络通信的核心技术之一,特别是在Windows环境下,如VC++6.0这样的开发工具中,它提供了强大的网络通信功能。本教程汇集了多个关于VC++6.0中Socket编程的学习资源,包括文档和演示文稿,旨在帮助...

    Socket编程概述 ppt

    Socket编程涉及创建、连接、发送和接收数据,使得两个运行在网络上的程序能够相互通信。 TCP(传输控制协议)是一种面向连接的、可靠的传输协议,确保数据包按顺序无损地到达目的地。TCP通过三次握手建立连接,并在...

    Socket编程例子

    下面我们将深入讨论Socket编程的基本原理、步骤以及在实际应用中的使用。 一、Socket的基本概念 Socket源自Unix系统,是网络通信的一个抽象接口,它为应用程序提供了低级的、面向连接的、双向通信机制。Socket分为...

    总结java_socket编程.doc

    在Java中,Socket编程主要是基于TCP/IP协议的网络编程。 网络编程的两个主要问题 在网络编程中,有两个主要的问题需要解决:一是如何准确地定位网络上的一台或多台主机,二是找到主机后如何可靠高效地进行数据传输...

    VC学习笔记-基于TCP的socket编程

    ### 基于TCP的Socket编程在VC中的应用与实现 #### 一、知识点概览 在VC(Visual C++)环境下进行网络编程时,基于TCP的socket编程是实现客户端与服务器之间通信的重要方式之一。本文将从初始化、创建socket、绑定...

    Socket编程实例

    Socket编程是网络编程中的核心部分,它允许两个网络应用程序通过TCP/IP协议进行通信。在这个C#的实例中,我们探讨了如何使用Socket类创建一个简单的聊天通信程序,包括客户端和服务端的实现。以下是对这个主题的详细...

    实战Linux Socket编程

    在IT领域,Linux Socket编程是网络通信的核心技术之一,它为开发者提供了在Linux操作系统上实现进程间通信(IPC)和网络通信的接口。本实战指南将深入探讨这一主题,帮助你掌握如何在Linux环境中构建高效的网络应用...

    华中科技大学计算机学院socket编程实验源代码

    此实验旨在帮助学生深入理解socket编程原理,并在实际操作中掌握网络通信的关键技术。 首先,让我们详细探讨socket编程。Socket是网络通信中的一个编程接口,它允许两个进程之间通过网络进行双向通信。在本实验中,...

    使用socket编程模拟滑动窗口协议

    - Socket是应用层与TCP/IP协议族之间的一个接口,用于在网络中传输数据。 - 在本项目中,使用C语言的socket API创建服务器(SlideWindowReceiver.c)和客户端(SlideWindowSender.c),分别模拟接收方和发送方。 ...

    C++socket编程实例

    在IT领域,网络通信是不可或缺的一部分,而C++作为强大的编程语言,提供了丰富的库支持进行网络编程,其中就包括了socket编程。本篇将详细探讨C++中的socket编程,主要聚焦于TCP和UDP两种传输协议的实现。 首先,...

    SOCKET编程的入门知识精华

    Socket编程具有很好的跨平台性,因为它的API是基于标准的Berkeley Sockets接口,可以在多种操作系统上运行,如Linux、Windows等。 6. **异常处理** 在实际编程中,需要对各种可能的错误进行处理,如网络中断、...

Global site tag (gtag.js) - Google Analytics