我对网络通信很陌生,我正在尝试构建客户机-服务器应用程序。
protected void init(){
Server myServer = new Server();
Client myClient = new Client();
}那是我的客户级:
public class Client {
public Client() {
init();
}
private void init() {
Socket echoSocket = null;
DataOutputStream os = null;
DataInputStream is = null;
DataInputStream stdIn = new DataInputStream(System.in);
try {
echoSocket = new Socket("localhost", 1234);
os = new DataOutputStream(echoSocket.getOutputStream());
is = new DataInputStream(echoSocket.getInputStream());
os.writeInt(stdIn.readInt());
echoSocket.getOutputStream().close();
echoSocket.getInputStream().close();
echoSocket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}那是服务器:
public class Server {
public Server() {
init();
}
private void init() {
try {
boolean run = true;
ServerSocket ss = new ServerSocket(1234);
Socket s = ss.accept();
DataInputStream dis = new DataInputStream(s.getInputStream());
System.out.println(dis.readInt());
s.getInputStream().close();
s.getOutputStream().close();
s.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}首先:我可以像我一样初始化客户机和服务器吗?new Server()和new Client()
问题2:我最初初始化的内容重要吗?客户端还是服务器?
问题3:当我第一次初始化客户端编译这段代码时,我变成了Connection refused: connect。我知道这意味着在您试图连接的端口上没有运行侦听套接字。我想,这就是为什么服务器必须先行的原因。是这样吗?我可以用setSoTimeout来修复它吗?
问题4:当我用服务器和客户端编译它时,输出就算不了什么了。我认为这与客户无关,因为如果我尝试打印"1",它也不起作用。我认为它只是在等待客户,什么都不做。我怎么才能解决这个问题?也许setSoTimeout也来了?
发布于 2013-12-01 18:09:51
客户端和服务器不能同时位于同一个线程中。
正如您已经看到的,服务器接受连接并尝试读取某些内容。它不知道客户端在同一个线程中运行。
要么创建一个多线程应用程序,其中客户端和服务器有自己的线程。或者做两个彼此独立运行的程序。后者也是“正常情况”。
发布于 2013-12-01 18:31:08
创建两个不同的项目,第一个运行服务器而不是客户端。服务器会在控制台上写“服务器启动”,而不是运行客户端,它会问你的名字,键入你的名字,按下确定。您的名字将被发送到服务器和服务器将回答说你好你。
这是服务器代码
import java.net.*;
import java.io.*;
import javax.swing.*;
public class Server {
public static void main(String[] args) {
try{
ServerSocket ss= new ServerSocket(2224);
System.out.println("Serever started");
while(true)
{
Socket s=ss.accept();
InputStream is=s.getInputStream();
InputStreamReader isr=new InputStreamReader(is);
BufferedReader br=new BufferedReader(isr);
OutputStream os=s.getOutputStream();
PrintWriter pw=new PrintWriter(os);
String name=br.readLine();
String message="Hello "+name+"from server";
pw.println(message);
pw.flush();
}
}
catch(Exception exp)
{
System.out.println("Excepttion occured");
}
}
}这是客户端代码
import java.net.*;
import java.io.*;
import java.util.Scanner;
import javax.swing.*;
public class Client {
public static void main(String[] args) throws IOException {
Socket s=new Socket("localhost",2224);
InputStream is=s.getInputStream();
InputStreamReader isr=new InputStreamReader(is);
BufferedReader br=new BufferedReader(isr);
OutputStream os=s.getOutputStream();
PrintWriter pw=new PrintWriter(os,true);
String message = JOptionPane.showInputDialog("Give your name");
pw.println(message);
pw.flush();
String servermessage = br.readLine();
JOptionPane.showMessageDialog(null, servermessage);
s.close();
}
}https://stackoverflow.com/questions/20315409
复制相似问题