[英]TCP socket connection
我是网络通信的新手,正在尝试构建客户端-服务器应用程序。
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
去了吗?
您不能在同一线程中同时拥有客户端和服务器。
正如您已经观察到的,服务器接受连接并尝试读取内容。 它不知道客户端在同一线程中运行。
要么创建一个多线程应用程序,其中客户端和服务器都有自己的线程。 或制作两个彼此独立运行的程序。 后者也将是“正常情况”。
进行两个不同的项目,首先运行服务器,然后运行客户端。 服务器将在控制台“服务器已启动”上进行写操作,而不是在运行客户端上进行操作,它将询问您的姓名,然后按ok键入您的姓名。 您的名字将被发送到服务器,服务器将回复并向您问好。
这是服务器代码
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();
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.