Socket 编程入门
两个进程间可以通过一个双向的网络通信连接实现数据交换,这种通信链路的端点被称为”套接字”(Socket)
Socket通常用来实现Client-Server连接
建立连接时所需的寻址信息
远程计算机的机器名或IP地址
试图连接的端口号
java.net包中定义的两个类Socket和ServerSocket,分别用来实现双向连接的client和server端。
1. Socket编程基本步骤
1.建立网络连接
2.打开连接到Socket的输入/输出流
3.通过已打开的I/O流进行数据读/写操作
4.关闭已打开的I/O流和Socket
//服务端
package demo1;
import java.io.DataInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class ServerSocketTest {
public static void main(String[] args) {
try {
ServerSocket ss=new ServerSocket(8888);//创建一个服务端对象,接受端口号为8888
// ss.setSoTimeout(3000);// 设置服务端等待时间, 如果没有客户端运行 服务端只等待3秒就结束
//服务端接受客户端 返回一个socket对象
Socket client=ss.accept();
InputStream in=client.getInputStream();//socket对象调用getInputStream()方法,返回一个输入流对象
DataInputStream dis=new DataInputStream(in);//将一个输入流对象传入数据输入流中
//数据输入流允许应用程序以与机器无关方式从底层输入流中读取基本 Java 数据类型。应用程序可以使用数据输出流写入稍后由数据输入流读取的数据。
String a=dis.readUTF();//调用readUTF方法返回一个字符串
// 从流中读取用 UTF-8 修改版格式编码的 Unicode 字符格式的字符串;然后以 String
形式返回此字符串。
dis.close();
in.close();
client.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
//运行服务端
//客户端
package demo1;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;
public class SoketTest {
public static void main(String[] args) throws UnknownHostException, IOException {
Socket s= new Socket("127.0.0.1",8888);//设置本地回环IP地址,端口号8888
OutputStream out=s.getOutputStream();//接收一个输出流对象
DataOutputStream dos=new DataOutputStream(out);
dos.writeUTF("你好");//将字符串写入流中
// s.setSoTimeout(1000);//设置客户端延迟时间
dos.close();
out.close();
s.close();
}
}
//运行,服务端响应客户端,同时服务端响应过后,服务端停止运行