本文介绍了一种非常基本的单向客户端和服务器设置 , 其中客户端连接 , 将消息发送到服务器 , 并且服务器使用Socket连接显示消息 。要使这些功能正常工作 , 需要进行很多底层操作 , 但是JAVA API网络软件包(java.net)会处理所有这些工作 , 从而使程序员的网络编程变得非常容易 。
文章插图
客户端编程建立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)
文章插图
通讯
为了通过Socket连接进行通信 , 流被用于输入和输出数据 。
断开连接
发送到服务器的消息后 , Socket连接将明确关闭 。
在程序中 , 客户端不断读取用户的输入并将其发送到服务器 , 直到键入“ Over”为止 。
文章插图
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);
}
}
文章插图
服务器编程建立Socket连接
【Java Socket实战编程指南】要编写服务器应用程序 , 需要两个Socket 。
等待客户端请求的ServerSocket(客户端创建新的Socket()时)
一个普通的旧SocketSocket , 用于与客户端进行通信 。
文章插图
通讯
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");
推荐阅读
- Javascript中操作String字符串的33种方法,你都知道吗?
- 再推荐5个Java项目开发快速开发脚手架。项目经验和私活都不愁了
- Java集合的常见用法你知道多少?
- java人脸融合
- Java在现实中实际开发的主要领域在哪些方面?
- 前5个基于Redis的Java对象
- Java中的BigDecimal,你真的会用吗?最强指南
- 解析10个JavaScript笔试题
- 认识 V8 引擎
- 这可能是你见过的用JavaSwing开发的最美的软件