基于Socket的java网络编程
网络上的两个程序通过一个双向的通讯连接实现数据的交换,这个双向链路的一端成为一个socket。Socket通常用来实现客户方和服务方的连接。Socket是TCP/IP协议的一个十分流行的编程界面,一个socket有一个IP地址和一个端口号唯一的确定。
但是,socket所支持的协议类也不仅仅是TCP/IP一种。在java环境下,socket编程主要是指基于TCP/IP协议的网络编程。
2.Socket通讯的过程
Server端Listen(监听)某一个端口是否有连接请求,Client端向server端发出connect(连接)请求,server端向client端发回Accept(接收)消息。一个连接就建立起来了。Server端和client端都可以通过send,write等方法与对方通信。
Socket工作过程包含四个基本步骤:
(1).创建socket;
(2).打开连接到Socket的输入/输出流;
(3).按照一定的协议对Socket进行读/写操作;
(4).关闭Socket
Java在包java.net中提供了两个类Socket和ServerSocket,分别用来表示双向连接的客户端和服务器端。
客户端代码:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;
public class SocketClient {
public static void main(String[] args) {
try {
//创建socket
Socket socket=new Socket("127.0.0.1", 4700);
//由系统标准输入设备构建bufferedreader对象
BufferedReader sin=new BufferedReader(new InputStreamReader(System.in));
//由socket对象得到输出流,并构造printwriter对象
PrintWriter os=new PrintWriter(socket.getOutputStream());
//由socket对象得到输入流,并构建相应的bufferreader对象
BufferedReader is=new BufferedReader(new InputStreamReader(socket.getInputStream()));
String readline;
readline=sin.readLine();
while(!readline.equals("bye"))
{
//将系统标准输入读入的字符串输出到server
os.println(readline);
os.flush();
System.out.println("Client:"+readline);
System.out.println("Server:"+is.readLine());
readline=sin.readLine();
}
os.close();
is.close();
socket.close();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
服务器端代码
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class SocketServer {
public static void main(String[] args) {
ServerSocket server=null;
try {
server=new ServerSocket(4700);
Socket socket=null;
socket=server.accept();
String line;
BufferedReader is=new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter os=new PrintWriter(socket.getOutputStream());
BufferedReader sin=new BufferedReader(new InputStreamReader(System.in));
System.out.println("Client:"+is.readLine());
line=sin.readLine();
while(!line.equals("bye"))
{
os.println(line);
os.flush();
System.out.println("Server:"+line);
System.out.println("Client:"+is.readLine());
line=sin.readLine();
}
os.close();
is.close();
socket.close();
server.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}