繁体   English   中英

TCP套接字连接

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM