网络编程(TCP)
TCP需要连接(三次握手)。发送端也称客户端,接收端也称服务端
1. TCP客户端
Socket类:此类实现客户端套接字(也可以就叫“套接字”)。套接字是两台机器间通信的端点
import java.io.IOException;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;
/*
* Socket(InetAddress address, int port)
创建一个流套接字并将其连接到指定 IP 地址的指定端口号。
*
* 创建socket对象
* 获取输出流对象
* 发送
* 释放
*
*/
public class Send {
public static void main(String[] args) throws IOException {
//创建Socket对象
InetAddress address=InetAddress.getByName("DESKTOP-3DTIOB8");//获取服务端ip
int port=8888;//服务端端口
Socket socket=new Socket(address,port);
//获取输出流对象
OutputStream out= socket.getOutputStream();
//发送
String s="hell word!";//data
byte[] buf=s.getBytes();//转换成字节
out.write(buf);
//释放
socket.close();
}
}
Connection refused:connect 当只有发送端的时候(运行),会抛出异常,因为TCP是有连接的(3次握手)
2. TCP服务端
ServerSocket类; 此类实现服务器套接字。服务器套接字等待请求通过网络传入。它基于该请求执行某些操作,然后可能向请求者返回结果。
Socket accept() 侦听并接受到此套接字的连接。
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
/*
* 创建ServerSocket对象
* 监听
* 获取输入流对象
* 获取数据
* 输出数据
* 释放
*
*/
public class Reserve {
public static void main(String[] agrs) throws IOException {
//创建socket对象(首先创建ServerSocker,再利用监听获取socket)
ServerSocket serversocket= new ServerSocket(8888);
Socket socket=serversocket.accept();
//获取输入流
InputStream input= socket.getInputStream();
//获取数据
byte[] buf=new byte[1024];
/*
* int read(byte[] b)
* 从输入流中读取一定数量的字节,并将其存储在缓冲区数组 b 中。
*/
input.read(buf);
System.out.print(new String(buf));
}
}
运行过程中常遇到的阻塞:
1. accept(); //服务端等待客户端介入,如果没有客户端介入,一直等待
2. read();//两端等待对方的数据的时候,如果没有数据过来就处于等待状态;
编写程序的时候常见的两个错误:
1.端口号被绑定
2.找不到主机;