1.流式套接字
提供了一个面向连接,可靠的数据传输服务,数据无差错,无重复的发送,且按发送顺序接收,其实他对应使用的是TCP协议
2.数据报式套接字
面向无连接,数据报以独立包形式发送,不提供无差错保证,数据可能丢失或重复,并且接收顺序无序,其实他对应使用的是UDP协议
3.原始式套接字
该接口允许对较低层次协议,如IP直接访问。可以接收本机网卡上的数据帧或数据包,对监听网络流量和分析很有用
//1.使用字节流利用Socket实现服务端和客户端,客户端发送:服务端,小样
//服务端回复:客户端,大样 然后退出
public class Server {
public static void main(String[] args) throws IOException {
// Scanner scanner = new Scanner(System.in);
//1、创建服务器serverSocket
ServerSocket server = new ServerSocket(10086);
//2、接收连接的客户端
Socket client = server.accept();
System.out.println("客户端:"+client.getInetAddress()+"连接上了");
System.out.println("服务端已接收到连接的客户端...");
//3、获取客户端对象的网络流
InputStream inputStream = client.getInputStream();
OutputStream outputStream = client.getOutputStream();
int len=0;
byte[] bytes = new byte[1024];
while ((len= inputStream.read(bytes))!=-1){
System.out.println("客户端说:"+new String(bytes,0,len));
}
outputStream.write("客户端,大样".getBytes());
outputStream.flush();
// System.out.println();
//4、通过缓冲字符流从网络中读取数据
outputStream.close();
inputStream.close();
client.close();
server.close();
}
}
public class Client {
public static void main(String[] args) throws IOException {
//1、创建客户端 192.168.2.210
Socket client = new Socket("127.0.0.1",10086);
//2、客户端发送数据到服务端,通过网络输出流发送数据到服务端
OutputStream outputStream = client.getOutputStream();
InputStream inputStream = client.getInputStream();
//服务器先听后说
outputStream.write("服务器,小样".getBytes());
outputStream.flush();
client.shutdownOutput();int len = 0;
byte[] bytes = new byte[1024];
while ((len = inputStream.read(bytes))!=-1){
System.out.println("服务端回复:"+new String(bytes,0,len));
}//3、开始发送数据
System.out.println("客户端数据发送完毕...");
inputStream.close();
outputStream.close();
client.close();
}
}