`
flowercat
  • 浏览: 361235 次
社区版块
存档分类
最新评论

java socket 长连接发送数据

    博客分类:
  • java
阅读更多
Client:

Socket ss = null;
InputStream in = null;
DataOutputStream dos = null;

public MySocketClient() {

}

public static byte[] intToBytes(int v) {
byte[] b = new byte[4];
b[0] = (byte) ((v >>> 24));
b[1] = (byte) ((v >>> 16));
b[2] = (byte) ((v >>>);
b[3] = (byte) ((v >>> 0));
for(int i=0;i<b.length;i++)
System.out.println(b[i]);
System.out.println(Integer.toBinaryString(v));
return b;
}

public static int bytesToInt(byte[] b) {
int ret = 0;
        ret |= (b[0] & 0xff) << 24;
        ret |= (b[1] & 0xff) << 16;
        ret |= (b[2] & 0xff) << 8;
        ret |= (b[3] & 0xff) << 0;
        return ret;
}

public boolean keeplive() {
try {
if (ss == null || !(ss.isConnected() && !ss.isClosed())) {
ss = new Socket("127.0.0.1", 9901);
                                     ss.setKeepAlive(true);
in = ss.getInputStream();
dos = new DataOutputStream(ss.getOutputStream());
}
return true;
} catch (IOException e) {
if (ss != null) {
try {
ss.close();
ss = null;
dos = null;
in = null;
} catch (IOException e1) {
}
}
try {
Thread.sleep(1000 * 5);
} catch (InterruptedException e1) {
}
return false;
}
}

public void run() {
while (!keeplive())
;
while (true) {
try {
byte[] b = "hello".getBytes();
int l = b.length;
dos.write(intToBytes(l));
dos.write(b);
dos.flush();

int leng = 0;
byte[] buffer = new byte[1024];
leng = in.read(buffer);
if (leng > 0)
System.out.println(new String(buffer));
Thread.sleep(1000);
} catch (Exception e) {
if (ss != null) {
try {
ss.close();
ss = null;
dos = null;
in = null;
} catch (IOException e1) {
e1.printStackTrace();
}
}
while (!keeplive())
;
}
}
}





Server:


public void run() {

try {
while (true) {
byte[] totalData = new byte[0];
int totalLeg = 0;
int leng = 0;

byte[] size = new byte[4];
int readsize = 0;
if (in.read(size) > 0)
readsize = bytesToInt(size);
else
continue;

byte[] buffer = new byte[readsize];
leng = in.read(buffer, 0, readsize);
System.out.println(new String(buffer).trim());
int le=(int)(Math.random()*100)+1;
byte[] b=new byte[le];
new Random().nextBytes(b);
os.write(b);
os.flush();
}
} catch (IOException e) {
// e.printStackTrace();
}
finally {
try {
s.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}



public static void main(String[] args) throws IOException{
ServerSocket ss=null;
try {
ss=new ServerSocket(9901);
} catch (IOException e) {
e.printStackTrace();
}
while(true){
Socket socket=ss.accept();
socket.setKeepAlive(true);
new MyRunableSocket(socket).start();
}
}
分享到:
评论

相关推荐

    Java实现Socket长连接和短连接

    Socket连接分为两种类型:长连接和短连接。这两种连接方式各有特点,适用于不同的应用场景。 **1. 短连接(Short Connection)** 短连接通常用于一次性、非持久性的通信,如HTTP协议就是典型的短连接。在短连接中...

    java socket长连接客户端服务端(标准实例)

    2. **资源释放**:虽然示例中没有明确展示资源的释放过程,但在实际开发中应该注意适当关闭不再使用的Socket连接和相关的输入输出流。 3. **并发安全**:由于涉及多线程操作,需要注意线程安全问题。 #### 七、总结...

    java socket 长连接实例

    "Java Socket 长连接实例"是关于如何实现一个持久连接的服务器和客户端程序的示例,这种连接能够保持开放,直到一方明确地关闭它。这在需要频繁通信或者需要长时间保持连接状态的应用场景中非常有用,比如聊天应用、...

    Socket长连接+心跳包+发送读取

    在Socket长连接中,客户端和服务器可以通过write()函数发送数据,通过read()函数接收数据。发送数据时,需要将数据转化为字节流并写入Socket的输出流;读取数据时,从输入流中读取字节流并解析为需要的格式。在处理...

    java使用Socket类接收和发送数据

    使用`Socket`的`close()`方法可以关闭Socket连接。 ```java socket.close(); ``` 在实际应用中,可能还需要处理更复杂的情况,例如设置超时、处理并发连接、异常恢复等。`Socket`类还提供了其他方法,如`...

    利用socket连续发送与连续接收数据

    - 客户端也需要循环发送数据,这里可以使用`Socket`的`OutputStream`,如`Socket.getOutputStream().write()`,连续发送三次数据。 - 接收服务器返回的处理结果,使用`Socket`的`InputStream`读取。 - 当发送完三...

    Android-Socket长连接通信心跳包消息回调Java服务端

    通过分析和学习这个项目,你可以更直观地了解上述知识点的实现方式,包括如何创建Socket连接、实现心跳包、处理消息回调以及服务端的多线程处理等。 总结,实现“Android-Socket长连接通信心跳包消息回调Java服务端...

    JAVA socket收发数据,并支持断网自动连接

    - **Socket类**:在Java中,`java.net.Socket`类代表一个TCP连接,它封装了输入/输出流,用于与服务器进行数据交换。 - **ServerSocket类**:`java.net.ServerSocket`类用于监听客户端的连接请求,一旦有连接请求...

    java socket 长连接

    - `MoreClient.java`: 这可能是实现多客户端连接的类,可能会使用线程池来管理多个Socket连接。 - `MoreServer.java`: 处理多个客户端连接的服务器端代码,可能包含线程池和心跳机制。 - `Client.java`: 单个...

    Java的socket长连接实例

    接着是`Connection.java`,它可能是代表单个Socket连接的类,具有以下组件和方法: 1. Socket实例:存储实际的Socket对象,用于数据传输。 2. 输入/输出流:通过`Socket`获取`InputStream`和`OutputStream`,用于...

    Java Socket 实现SMTP邮件发送,支持SSL/TSL

    而Java Socket库则提供了实现SMTP客户端所需的基本功能,允许我们创建连接到SMTP服务器的套接字,并通过这个连接发送邮件。以下是一些关键知识点: 1. **Java Socket类**:Java的`java.net.Socket`类是网络通信的...

    socket长连接demo

    总结起来,Java Socket编程中的长连接实现涉及TCP连接的创建、数据交换、心跳机制以及资源的管理和关闭。理解和掌握这些知识点对于开发高效、可靠的网络应用至关重要。在实际工作中,还需要考虑异常处理、线程安全...

    socket 长连接 多线程 心跳包 包头包体

    socket 长连接 简单例子,适合初学的朋友,里面有多线程 实现的,包括心跳包,数据分为两部分传送,首先双方约定用一个4字节的数组告诉对方要传送数据的长度,然后在写入数据,这样长连接的时候,双方可以知道对方...

    java socket 视频流转发socket

    这需要创建一个新的Socket连接到目标地址,并通过`OutputStream`写入数据: ```java Socket forwardSocket = new Socket(targetHost, targetPort); OutputStream out = forwardSocket.getOutputStream(); out....

    java socket 客户端代码

    这些流可以用于读取服务器发送的数据,以及向服务器发送数据。 4. **数据传输**: 对于基于文本的聊天应用,我们可以使用`BufferedReader`和`PrintWriter`来读写数据。例如: ```java BufferedReader in = new ...

    java socket处理硬件传过来的16进制数据的工具类

    java socket处理硬件传过来的16进制数据的工具类,包含大小端转换、byte[]数组转换为16进制的字符串、byte[]转ByteBuffer、16进制字符串转换为byte数组等

    Socket长连接demo

    通过阅读和理解这个示例,开发者可以学习到如何在Python、Java或其他支持Socket编程的语言中,建立、维护和管理长连接。同时,对于网络编程的基础知识,如TCP/IP协议、套接字API的使用等,也会有更深入的理解。

    Socket心跳连接_java

    1. **建立Socket连接**:客户端使用`Socket`类的构造函数,指定服务器的IP地址和端口号,建立到服务器的连接。 2. **心跳包设计**:定义心跳包的格式,例如可以是一个简单的JSON对象,包含时间戳和"ping"或"pong"的...

    socket客户端长连接实现以及xml文件解析

    在IT领域,Socket编程是网络通信的基础,而XML(Extensible Markup Language)则是...在xfunds-socket-price这个项目中,可能涉及到通过Socket连接获取价格数据,这些数据以XML格式传输,然后在客户端进行解析和处理。

Global site tag (gtag.js) - Google Analytics