「java中双向通讯」双向通信例子

博主:adminadmin 2023-01-25 10:06:08 500

本篇文章给大家谈谈java中双向通讯,以及双向通信例子对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

通过Java中的Socket技术编写能够进行双向通信的客户端和服务器,为了能够同时进行消息的发送和接受,在服

SocketClient1.java内容如下:

package com.polyphylla.socket;

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;

import java.io.PrintWriter;

import java.net.Socket;

import java.net.UnknownHostException;

public class SocketClient1 {

private Socket socket;

public SocketClient1() {

try {

socket = new Socket("127.0.0.1", 2222);

} catch (UnknownHostException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

}

/**

* @param args

*/

public static void main(String[] args) {

new SocketClient1().startClient();

}

public void startClient() {

new Thread(new ClientReader(socket)).start();

new Thread(new ClientWriter(socket)).start();

}

}

class ClientReader implements Runnable {

private Socket socket;

public ClientReader(Socket socket) {

this.socket = socket;

}

public void run() {

BufferedReader br = getReader();

String msg = null;

try {

while ((msg = br.readLine()) != null) {

System.out.println("client:" + msg);

}

} catch (IOException e) {

e.printStackTrace();

} finally {

try {

if (br != null)

br.close();

if (socket != null)

socket.close();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

private BufferedReader getReader() {

try {

return new BufferedReader(new InputStreamReader(socket

.getInputStream()));

} catch (IOException e) {

e.printStackTrace();

}

return null;

}

}

class ClientWriter implements Runnable {

private Socket socket;

public ClientWriter(Socket socket) {

this.socket = socket;

}

public void run() {

PrintWriter pw = getWriter();

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

String str = null;

try {

while ((str = br.readLine()) != null) {

pw.println(str);

pw.flush();

}

} catch (IOException e) {

e.printStackTrace();

} finally {

if (pw != null)

pw.close();

try {

if (socket != null)

socket.close();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

private PrintWriter getWriter() {

try {

return new PrintWriter(socket.getOutputStream());

} catch (IOException e) {

e.printStackTrace();

}

return null;

}

}

SocketServer1.java内容如下:

package com.polyphylla.socket;

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;

import java.io.PrintWriter;

import java.net.ServerSocket;

import java.net.Socket;

public class SocketServer1 {

private ServerSocket ss;

public SocketServer1() {

try {

ss = new ServerSocket(2222);

} catch (IOException e) {

e.printStackTrace();

}

}

public static void main(String[] args) {

new SocketServer1().startServer();

}

public void startServer() {

try {

while (true) {

Socket s = ss.accept();

new Thread(new ServerReader(s)).start();

new Thread(new ServerWriter(s)).start();

}

} catch (IOException e) {

e.printStackTrace();

}

}

}

class ServerReader implements Runnable {

private Socket socket;

public ServerReader(Socket socket) {

this.socket = socket;

}

public void run() {

BufferedReader br = getReader();

String msg = null;

try {

while((msg = br.readLine()) != null) {

System.out.println("server:" + msg);

}

} catch (IOException e) {

e.printStackTrace();

} finally {

try {

if(br != null)

br.close();

if(socket != null)

socket.close();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

private BufferedReader getReader() {

try {

return new BufferedReader(new InputStreamReader(socket.getInputStream()));

} catch (IOException e) {

e.printStackTrace();

}

return null;

}

}

class ServerWriter implements Runnable {

private Socket socket;

public ServerWriter(Socket socket) {

this.socket = socket;

}

public void run() {

PrintWriter pw = getWriter();

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

String str = null;

try {

while((str = br.readLine()) != null) {

pw.println(str);

pw.flush();

}

} catch (IOException e) {

e.printStackTrace();

} finally {

if (pw != null)

pw.close();

try {

if (socket != null)

socket.close();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

private PrintWriter getWriter() {

try {

return new PrintWriter(socket.getOutputStream());

} catch (IOException e) {

e.printStackTrace();

}

return null;

}

}

如何实现两个java程序之间的相互通讯,不想用Socket

通讯有两类。

一类是直接通讯。必然是通过socket的。但是使用上可以分为两种

一种模式是通过自定义的socket报文。

另一种是通过已封装的sokcet协议。例如 rpc调用,webservice,http等等。

另一类是通过Server转。例如下面的文件共享,mq通知,数据库传输,memcache,等等。都可以达到你的要求。

java 网络编程: 如何实现客户端与客户端之间的之间通信

服务器告知双方对方的ip地址,并协调由哪一方主动连接。

如 协调结果是: 把c2的地址告诉c1,让c1主动连接c2,让c2打开端口等待连接。

要考虑认证问题,比如c2如何知道连接上来的是c1,而不是其他人,就需要有认证机制。

另外要考虑内网问题。由于从外部连接内网里面的IP地址是相当繁琐复杂的,所以需要特别的机制处理。

java中双向通讯的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于双向通信例子、java中双向通讯的信息别忘了在本站进行查找喔。