在Java中发送和接收消息
我目前正在使用Java处理TCP/IP套接字请求响应系统,我能够设置某些客户端/服务器接口,客户端可以在其中将消息发送到服务器,并且服务器打印了消息,以便控制台。我希望服务器还能够向客户端和Vis-Versa发送响应。我有可能实现这一目标吗?
这是客户端代码
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
public class Main {
public static void main(String[] args) throws IOException {
String localhost = "127.0.0.1";
int port = 8091;
sendMessage(localhost, port);
}
public static void sendMessage(String server, int port) throws IOException {
// Client
Socket socket = new Socket(server, port);
DataOutputStream output = new DataOutputStream(socket.getOutputStream());
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
while(true){
String input = bufferedReader.readLine();
output.writeUTF(input);
System.out.println("message sent " + input );
// receiveResponse(port);
if(input.equalsIgnoreCase("exit"))
break;
// if(output.writeUTF(input)){}
}
socket.close();
}
public static void receiveResponse(int port) {
try {
ServerSocket serverSocket = new ServerSocket(port);
Socket as = serverSocket.accept();
DataInputStream in = new DataInputStream(as.getInputStream());
String yoo = in.readUTF();
System.out.println("Client: " + yoo);
if(!yoo.isEmpty()){
System.out.println("message received");
}
if(yoo.equalsIgnoreCase("exit")){
System.out.println("Hello world");
}
} catch (Exception ex) {
ex.printStackTrace();
}
}
}```
Below is the server code
```
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
public class Server {
public static void main(String[] args) throws IOException {
int port = 8091;
receiveMessage(port);
}
public static void receiveMessage(int port) throws IOException {
ServerSocket serverSocket = new ServerSocket(port);
Socket as = serverSocket.accept();
System.out.println("Connected");
System.out.println("incoming = " + as.getInputStream());
DataInputStream in = new DataInputStream(as.getInputStream());
System.out.println(in.readUTF());
// ==========================
while(true){
String yoo = in.readUTF();
System.out.println("Client: " + yoo);
if(!yoo.isEmpty()){
// sendResult();
System.out.println("message received");
}
if(yoo.equalsIgnoreCase("exit"))
break;
}
as.close();
}
public static void sendResult( ) {
try {
System.out.println("HELLO WORLD");
System.out.println("Connected to client");
// ObjectOutputStream os = new ObjectOutputStream(as.getOutputStream());
//
// os.writeObject(result);
// System.out.println("Result sent");
String str = "Hello World";
OutputStreamWriter osw;
Socket socket = null;
socket = new Socket("localhost", 8090);
osw =new OutputStreamWriter(socket.getOutputStream(), "UTF-8");
osw.write(str, 0, str.length());
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
```
I'm currently working on a TCP/IP socket request response system using java, I was able to setup some client/server interfaces where the client is able to send messages to the server and the server prints the message so the console. I want the server to also be able to send responses to the client and vis-versa. Is there a way possible I can achieve this ?
This is the client code
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
public class Main {
public static void main(String[] args) throws IOException {
String localhost = "127.0.0.1";
int port = 8091;
sendMessage(localhost, port);
}
public static void sendMessage(String server, int port) throws IOException {
// Client
Socket socket = new Socket(server, port);
DataOutputStream output = new DataOutputStream(socket.getOutputStream());
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
while(true){
String input = bufferedReader.readLine();
output.writeUTF(input);
System.out.println("message sent " + input );
// receiveResponse(port);
if(input.equalsIgnoreCase("exit"))
break;
// if(output.writeUTF(input)){}
}
socket.close();
}
public static void receiveResponse(int port) {
try {
ServerSocket serverSocket = new ServerSocket(port);
Socket as = serverSocket.accept();
DataInputStream in = new DataInputStream(as.getInputStream());
String yoo = in.readUTF();
System.out.println("Client: " + yoo);
if(!yoo.isEmpty()){
System.out.println("message received");
}
if(yoo.equalsIgnoreCase("exit")){
System.out.println("Hello world");
}
} catch (Exception ex) {
ex.printStackTrace();
}
}
}```
Below is the server code
```
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
public class Server {
public static void main(String[] args) throws IOException {
int port = 8091;
receiveMessage(port);
}
public static void receiveMessage(int port) throws IOException {
ServerSocket serverSocket = new ServerSocket(port);
Socket as = serverSocket.accept();
System.out.println("Connected");
System.out.println("incoming = " + as.getInputStream());
DataInputStream in = new DataInputStream(as.getInputStream());
System.out.println(in.readUTF());
// ==========================
while(true){
String yoo = in.readUTF();
System.out.println("Client: " + yoo);
if(!yoo.isEmpty()){
// sendResult();
System.out.println("message received");
}
if(yoo.equalsIgnoreCase("exit"))
break;
}
as.close();
}
public static void sendResult( ) {
try {
System.out.println("HELLO WORLD");
System.out.println("Connected to client");
// ObjectOutputStream os = new ObjectOutputStream(as.getOutputStream());
//
// os.writeObject(result);
// System.out.println("Result sent");
String str = "Hello World";
OutputStreamWriter osw;
Socket socket = null;
socket = new Socket("localhost", 8090);
osw =new OutputStreamWriter(socket.getOutputStream(), "UTF-8");
osw.write(str, 0, str.length());
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
```
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
所有事物是平等的(从您已经拥有的东西开始)您可以做这样的事情:
您需要查看一些事情:
main 类>管理通信的类。这将允许您维护client
client套接字
,inseameam
和of of tof -code
作为实例变量。datainputStream < / code>。
All things being equal (starting from what you already have) you could do something like this:
Some things you'll need to look at a little:
Main
class with aClient
class that manages the communication. This would allow you to maintainsocket
,inStream
andoutStream
as instance variables.DataInputStream
with a more specific / consistent transfer protocol method (byte count, delimiter, etc).