Java Socket实战编程指南

本文介绍了一种非常基本的单向客户端和服务器设置 , 其中客户端连接 , 将消息发送到服务器 , 并且服务器使用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连接
【Java 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");


推荐阅读