<返回更多

Java Socket实战编程指南

2020-06-05    
加入收藏

本文介绍了一种非常基本的单向客户端和服务器设置,其中客户端连接,将消息发送到服务器,并且服务器使用Socket连接显示消息。要使这些功能正常工作,需要进行很多底层操作,但是JAVA API网络软件包(java.net)会处理所有这些工作,从而使程序员的网络编程变得非常容易。

Java Socket实战编程指南
 
 
 

客户端编程

建立Socket连接

要连接到其他机器,我们需要一个Socket连接。Socket连接意味着两台机器具有有关彼此的网络位置(IP地址)和TCP端口的信息。java.net.Socket类表示一个Socket。打开socket:

Socket socket = new Socket(“127.0.0.1”, 5000)

第一个参数– 服务器的IP地址。(127.0.0.1是本地主机的IP地址,其中代码将在单个独立计算机上运行)。

第二个参数– TCP端口。(只是一个数字,表示要在服务器上运行哪个应用程序。例如,HTTP在端口80上运行。端口号可以从0到65535)

Java Socket实战编程指南
 
 
 

通讯

为了通过Socket连接进行通信,流被用于输入和输出数据。

断开连接

发送到服务器的消息后,Socket连接将明确关闭。

在程序中,客户端不断读取用户的输入并将其发送到服务器,直到键入“ Over”为止。

Java Socket实战编程指南
 
 
 

Java实现

// A Java program for a Client

import java.net.*;

import java.io.*;

 

public class Client

{

// initialize socket and input output streams

private Socket socket = null;

private DataInputStream input = null;

private DataOutputStream out = null;

 

// constructor to put ip address and port

public Client(String address, int port)

{

// establish a connection

try

{

socket = new Socket(address, port);

System.out.println("Connected");

 

// takes input from terminal

input = new DataInputStream(System.in);

 

// sends output to the socket

out = new DataOutputStream(socket.getOutputStream());

}

catch(UnknownHostException u)

{

System.out.println(u);

}

catch(IOException i)

{

System.out.println(i);

}

 

// string to read message from input

String line = "";

 

// keep reading until "Over" is input

while (!line.equals("Over"))

{

try

{

line = input.readLine();

out.writeUTF(line);

}

catch(IOException i)

{

System.out.println(i);

}

}

 

// close the connection

try

{

input.close();

out.close();

socket.close();

}

catch(IOException i)

{

System.out.println(i);

}

}

 

public static void main(String args[])

{

Client client = new Client("127.0.0.1", 5000);

}

}

Java Socket实战编程指南
 
 
 

服务器编程

建立Socket连接

要编写服务器应用程序,需要两个Socket。

等待客户端请求的ServerSocket(客户端创建新的Socket()时)

一个普通的旧SocketSocket,用于与客户端进行通信。

Java Socket实战编程指南
 
 
 

通讯

getOutputStream()方法用于通过Socket发送输出。

关闭连接

完成后,重要的是通过关闭Socket以及输入/输出流来关闭连接。

// A Java program for a Server

import java.net.*;

import java.io.*;

 

public class Server

{

//initialize socket and input stream

private Socket socket = null;

private ServerSocket server = null;

private DataInputStream in = null;

 

// constructor with port

public Server(int port)

{

// starts server and waits for a connection

try

{

server = new ServerSocket(port);

System.out.println("Server started");

 

System.out.println("Waiting for a client ...");

 

socket = server.accept();

System.out.println("Client accepted");

 

// takes input from the client socket

in = new DataInputStream(

new BufferedInputStream(socket.getInputStream()));

 

String line = "";

 

// reads message from client until "Over" is sent

while (!line.equals("Over"))

{

try

{

line = in.readUTF();

System.out.println(line);

 

}

catch(IOException i)

{

System.out.println(i);

}

}

System.out.println("Closing connection");

 

// close connection

socket.close();

in.close();

}

catch(IOException i)

{

System.out.println(i);

}

}

 

public static void main(String args[])

{

Server server = new Server(5000);

}

}

重要事项

服务器应用程序在特定的端口5000上创建一个ServerSocket。这将启动我们的服务器,以侦听端口5000传入的客户端请求。

然后,服务器创建一个新的Socket以与客户端进行通信。

socket = server.accept()

accept()方法会阻塞(只是坐在那里),直到客户端连接到服务器为止。

然后,我们使用getInputStream()方法从Socket获取输入。我们的服务器一直在接收消息,直到客户端发送“结束”为止。

完成后,我们通过关闭Socket和输入流来关闭连接。

要在计算机上运行客户端和服务器应用程序,请同时编译它们。然后,首先运行服务器应用程序,然后运行客户端应用程序。

在终端或命令提示符上运行

打开两个窗口,一个用在服务器,另一个用在客户端

1.首先以方式运行Server应用程序

$ java Server

服务器开始

等待客户端…

2.然后,在另一个终端上运行客户端应用程序,如下所示:

$ java Client

它将显示–已连接,并且服务器接受客户端并显示

3.然后,您可以开始在“客户端”窗口中键入消息。这是给客户的样本输入

Hello

I made my first socket connection

Over

服务器同时接收并显示的内容,

Hello

I made my first socket connection

Over

Closing connection

请注意,发送“ Over”将关闭客户端和服务器之间的连接,就像之前所说的那样。

如果您使用的是Eclipse或类似的工具,

在两个不同的终端或选项卡上编译它们两者

首先运行服务器程序

然后运行客户端程序

在客户端窗口中键入消息,服务器窗口会同时接收并显示这些消息。

键入结束。

声明:本站部分内容来自互联网,如有版权侵犯或其他问题请与我们联系,我们将立即删除或处理。
▍相关推荐
更多资讯 >>>