这几天一直在写一个GPS+SMS模式的定位程序,流程大致是这样,首先接收用户的定位请求,然后把这个请求按照制定的协议用xml包装,用Socket发给短信服务器,短信服务器发送指令至终端,终端反回经续度,然后再把这个经纬度送到GIS系统,获取地理信息位置描述,最后把这个结果返回给客户端。
但是因为网络或其它的原因,短信服务器经常没有响应,因此必须不停的建接,直到这个连接被建立。
client code
package com.tdt.client;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Timer;
import java.util.TimerTask;
import javax.net.SocketFactory;
public class Client {
private static Client client;
private static Timer timer = new Timer();
private static String host="localhost";
private int port =5555;
private static Socket socket;
private Client() throws UnknownHostException, IOException {
socket = SocketFactory.getDefault().createSocket(host, port);
System.out.println("connection "+host+":"+port+" success!");
}
//获得输出对象
private PrintWriter getWriter(Socket socket) throws IOException {
OutputStream socketOut = socket.getOutputStream();
return new PrintWriter(socketOut,true);
}
//获得读取对象
private BufferedReader getReader(Socket socket) throws IOException {
InputStream socketIn = socket.getInputStream();
return new BufferedReader(new InputStreamReader(socketIn));
}
//会话
public void talk() throws IOException {
try {
BufferedReader br = getReader(socket);
PrintWriter pw = getWriter(socket);
BufferedReader localReader = new BufferedReader(new InputStreamReader(System.in));
String msg=null;
while((msg=localReader.readLine()) !=null) {
if(msg.equalsIgnoreCase("bye")) {
System.out.println("会话结束");
break;
}
pw.println(msg);
System.out.println("server:"+br.readLine());
}
}catch(IOException e) {
e.printStackTrace();
}finally {
try {if (socket !=null)socket.close();} catch(IOException e) {
e.printStackTrace();
}
}
}
//实例化client
public static void instance() {
if(client ==null) {
try {
client = new Client();
} catch (Exception e) {
System.err.println(e.getMessage() +":"+host);
}
}
}
public static void main(String[] args) throws Exception{
if(args.length !=0) {
host = args[0].toString();
}
//用阻塞方法或计时器不断与服务连接,直到连接被建立
/* while(true) {
System.out.println("开始实例化");
instance();
if(client !=null)
break;
Thread.sleep(1000 *5);
}
client.talk(); */
timer.schedule(new TimerTask() {
public void run() {
if(client ==null) {
instance();
} else {
timer.cancel();
try {
client.talk();
} catch (IOException e) {System.err.println("IO流异常"); }
}
}
}, 0, 1000 * 5);
}
}
server code
package com.tdt.server;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class Server {
private ServerSocket serverSocket = null;
private Socket socket = null;
private int port =5555;
public Server() {
try {
serverSocket = new ServerSocket(port);
System.out.println("服务器端监听"+port+"端口");
} catch (IOException e) {
e.printStackTrace();
}
}
//获取输入流读取对象
public BufferedReader getReader(Socket st) throws IOException {
InputStream socketIn = st.getInputStream();
return new BufferedReader(new InputStreamReader(socketIn));
}
//获取输出对象
public PrintWriter getWriter(Socket st) throws IOException{
OutputStream out = st.getOutputStream();
return new PrintWriter(out,true);
}
public String echo(String msg) {
return "通讯测试,由服务器端发出";
}
public void service() {
try {
socket=serverSocket.accept();
System.out.println("有客户端连接");
System.out.println("IP="+socket.getInetAddress()+":"+socket.getPort());
} catch (IOException e1) {
e1.printStackTrace();
}
while(true) {
try {
BufferedReader br = getReader(socket);
PrintWriter pw = getWriter(socket);
String msg = null;
while((msg =br.readLine()) !=null) {
System.out.println("client:"+msg);
String echoMsg = echo(msg);
pw.println(echoMsg);
System.out.println("服务器回应:"+echoMsg);
if(msg.equalsIgnoreCase("bye")) {
break;
}
}
}catch(IOException e) {
e.printStackTrace();
System.out.println("IO流异常");
} finally {
try {
if(serverSocket!=null) serverSocket.close();
if(socket !=null) socket.close();
System.out.println("通讯测试结束,服务器端关闭");
System.exit(0);
} catch(IOException e) {e.printStackTrace();}
}
}
}
public static void main(String[] args) {
//启动服务器
new Server().service();
}
}
先启动client,让它不停的去连服务端,当然了,服务器端没有启动肯定没法与服务器建立连接
启动服务器端
分享到:
相关推荐
总之,Java Socket GUI 小 Demo 展示了如何使用Java进行网络通信和创建图形用户界面的基本技巧。通过学习这些知识,开发者可以构建自己的网络应用,如聊天室、文件传输工具等,这些都依赖于Socket进行数据交换,并...
通过学习和实践"Java Socket传输图片源代码",开发者可以掌握网络编程的基本原理和技巧,为构建更复杂的分布式系统打下坚实基础。同时,这个例子也适合初学者作为入门教程,通过实际操作加深对Socket编程的理解。在...
Java Socket技术在Android开发中广泛...通过对这个类的分析和调试,开发者可以深入理解Java Socket在Android中实现文件断点续传的细节和技巧。在实际应用中,还需要考虑安全问题,如文件的权限控制、防止恶意攻击等。
在Java中,`java.sql.ConnectionPoolDataSource`和`javax.sql.PooledConnection`接口用于数据库连接池,而对于Socket连接池,开发者可以使用第三方库如Apache Commons Pool或HikariCP。连接池的主要优点是减少资源...
在Java编程中,Socket通信是一种基础且重要的网络编程模型,常用于实现客户端与服务器之间的数据交互,包括文件传输。在这个示例中,我们将探讨如何利用Java的Socket API进行文件的发送与接收。以下是对"Java基于...
总的来说,这个"java中socket在线编程聊天系统的小案例"提供了一个实用的起点,帮助开发者掌握Socket编程的基本概念和实践技巧。通过研究和实践这个案例,你将能够构建自己的聊天应用程序,进一步理解和应用网络编程...
Java是世界上最流行的编程语言之一,尤其在企业级应用开发中占据主导地位。在这个"JAVA EJEMPLOS.zip_hearingq4l_java socket _zip...开发者可以通过深入研究这些代码,掌握Java Socket编程的基本原理和实践技巧。
Socket编程是计算机网络编程中的重要组成部分,主要用于实现客户端与服务器之间的通信。在Java中,Socket是基于TCP...通过学习和实践"Socket入门小例子",开发者可以更好地理解和掌握Socket编程的核心原理与实践技巧。
根据提供的文件信息,我们可以推断出这是一本包含330个Java小技巧的书籍或文档,旨在帮助读者提升Java编程技能。虽然具体内容没有详细列出,但从描述中我们可以大致了解到这本书涉及了Java的多个方面,并且鼓励用户...
总的来说,Socket编程中的定长和变长数据处理是网络通信中的基础概念,理解和掌握这些技巧对于开发高效、可靠的网络应用至关重要。无论是简单的文件传输,还是复杂的实时通信系统,都需要对这两类数据有恰当的处理...
通过上述步骤,我们可以实现一个简单的Java Socket文件传输小案例。不过,实际项目中还需要考虑更多因素,如文件的大小限制、错误重试机制、网络状况的适应性等。在不断实践和学习中,我们可以逐步掌握更复杂的网络...
通过以上知识点的介绍,可以看出Java中的TCP/IP Socket编程涉及到广泛的领域,从基础的概念到高级的应用技巧。无论是初学者还是有经验的开发者,都能够从中获得有用的信息。掌握了这些知识,你就能够更好地理解如何...
这篇文档集合了VC和Java编程的一些小技巧,旨在帮助开发者提高效率,解决实际问题。以下是对这些小技巧的详细解读: 1. **VC++编程技巧**: - **内存管理**:VC++中,理解智能指针如`shared_ptr`和`unique_ptr`的...
在实际的"Socket JAVA应用测试小程序"中,我们可能会看到如何设置Socket参数、如何处理连接建立和断开、如何读写数据以及如何进行错误处理等实际操作。这些基本概念和技巧是Java网络编程的基础,对于开发任何需要...
Java Socket通信是网络编程中的重要组成部分,...在设计和实现这样的系统时,开发者需要深入理解Socket的工作原理,掌握多线程编程和线程池的使用技巧,以及如何处理网络通信中的各种问题,以确保程序的健壮性和性能。
1. Socket通信:理解TCP和UDP协议,以及Socket和ServerSocket类的使用。 2. HTTP协议:了解HTTP的基本原理,能实现简单的HTTP客户端和服务端。 七、设计模式 1. 常见设计模式:熟悉单例、工厂、抽象工厂、建造者、...
在Android中,可以使用`java.net.Socket`类来创建和管理Socket连接。开发者需要创建一个Socket实例,并指定服务器的IP地址和端口号。然后,通过`Socket.getOutputStream()`获取输出流进行写操作(发送数据),通过`...
在Python中,可以使用`socket.socket()`创建Socket对象,`connect()`进行连接,`sendall()`发送数据,`recv()`接收数据。需要注意的是,由于网络的异步性,`recv()`可能不会一次性接收到所有数据,因此通常需要在一...
Java数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲区、写入数据到文件、关闭输入流、关闭套接字关闭输出流、输出错误信息等Java编程小技巧。 Java数组倒置...
本文将详细介绍Java Socket实现传输压缩对象的方法,并结合具体实例形式分析了Java Socket针对数据的压缩、传输、接收、解压缩等操作相关实现技巧。 一、Java Socket简介 Java Socket是Java语言中的一种网络编程...