TCP网络编程
这里我们通过一个例题来理解TCP网络编程
eg: 客户端发送信息给服务端,服务端将数据显示在控制台上
- 首先我们先给出服务器端
package 网络编程.TCP网络编程;
import java.net.ServerSocket;
import java.io.InputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.net.Socket;
public class Server {
public static void main(String[] args) throws IOException{
/*
创建ServerSocket对象,客户端是创建Socket,而服务器端厠是创建ServerSocket
创建ServerSocket时只需要填入端口号就可以了
*/
ServerSocket ss = new ServerSocket(8080);
/*
接收来自于客户端的Socket对象 -- 调用accept()方法
*/
Socket socket = ss.accept();
/*
获取对应的客户端的Socket中的输入流对象
*/
InputStream is = socket.getInputStream();
//创建一个By特ArrayOutputStream对象 --- 防止byte[] ---> String 时出现乱码
//ByteArrayOutputStream类中封装了一个数组,这个数组还可以进行扩容,功能就是将我们的所有byte数据读入到一个数组中之后全部一次输出
ByteArrayOutputStream baos = new ByteArrayOutputStream();
/*
创建一个缓冲数组
*/
byte [] bytes = new byte[5];
//创建临时变量用于存储read()方法的返回值
int len = 0;
while((len = is.read(bytes))!= -1){
baos.write(bytes,0,len);
}
/*
调用ByteArrayOutputStream类的toString()方法 --> 将ByteArrayOutputStream类中数组中存储的输出输出到控制台中
*/
System.out.println(baos);
/*
通过使用来自客户端的socket对象调用getInetAddress()方法就可以得到对应客户端IP的InetAddress对象,然后
调用这个对象的getHostAddress()方法就可以获取客户端的IP地址 -- 就可以看到是哪个客户端连接到了自己
*/
System.out.println("接收到了来自于"+socket.getInetAddress().getHostAddress()+"的连接");
/*
资源的关闭
*/
baos.close();
is.close();
socket.close();
ss.close();
}
}
- 这里我们给出客户端
package 网络编程.TCP网络编程;
import java.net.InetAddress;
import java.io.IOException;
import java.net.Socket;
import java.io.OutputStream;
public class Client {
public static void main(String[] args) throws IOException{
/*
首先创建一个InetAddress对象,表示一个IP地址,就是我们客户端要连接的服务器端的IP地址
对应的InetAddress对象
*/
InetAddress inet = InetAddress.getByName("127.0.0.1");
/*
创建Socket对象 ---> 客户端要创建Socket对象(Socket中封装IP + 端口号 + 数据)
*/
Socket socket = new Socket(inet,8080);
/*
获取Socket对象对应的输出流对象
*/
OutputStream os = socket.getOutputStream();
/*
使用Socket对象对应的输出流对象将数据写出
*/
os.write("你好,我是客户端飞飞".getBytes());
/*
关闭流资源
*/
os.close();
socket.close();
}
}
注意: 我们一定是要先运行服务器端,然后再运行客户端
- 因为我们先运行服务端之后服务端要去接受来自客户端的Socket