TCP套接字连接

时间:2013-12-01 18:04:54

标签: java sockets tcp

我是网络通信的新手,我正在尝试构建客户端 - 服务器应用程序。

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也会来这里?

2 个答案:

答案 0 :(得分:2)

您不能在同一个线程中同时拥有客户端和服务器。

正如您已经观察到的那样,服务器接受连接并尝试读取内容。它不知道客户端是在同一个线程中运行。

创建一个多线程应用程序,其中客户端和服务器有自己的线程。或者制作两个彼此独立运行的程序。后者也是“正常情况”。

答案 1 :(得分:1)

制作两个不同的项目,首先运行服务器而不是客户端。 服务器将在控制台“服务器启动”上写入,而不是运行客户端,它将询问您的姓名,输入您的姓名按确定。您的姓名将被发送到服务器,服务器将回复打招呼给您。

这是服务器代码

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();
    }
}