
注意:在java中只要是使用java.net.Socket类实现通信,底层即是使用了TCP协议。
public Socket(String host , int port) 创建发送端的Socket对象与服务端连接,参数为服务端程序的ip和端口。
OutputStream getOutputStream()
InputStream getInputStream()
创建客户端的Socket对象,请求与服务端的连接。
使用socket对象调用getOutputStream()方法得到字节输出流。
使用字节输出流完成数据的发送。
释放资源:关闭socket管道。
- /**
- 目标:完成Socket网络编程入门案例的客户端开发,实现1发1收。
- */
- public class ClientDemo1 {
- public static void main(String[] args) {
- try {
- System.out.println("====客户端启动===");
- // 1、创建Socket通信管道请求有服务端的连接
- // public Socket(String host, int port)
- // 参数一:服务端的IP地址
- // 参数二:服务端的端口
- Socket socket = new Socket("127.0.0.1", 7777);
-
- // 2、从socket通信管道中得到一个字节输出流 负责发送数据
- OutputStream os = socket.getOutputStream();
-
- // 3、把低级的字节流包装成打印流
- PrintStream ps = new PrintStream(os);
-
- // 4、发送消息
- ps.println("我是TCP的客户端,我已经与你对接,并发出邀请:约吗?");
- ps.flush();
-
- // 关闭资源。
- // socket.close();
-
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- }
public ServerSocket(int port) 注册服务端端口。
public Socket accept() 等待接收客户端的Socket通信连接, 连接成功返回Socket对象与客户端建立端到端通信。
创建ServerSocket对象,注册服务端端口。
调用ServerSocket对象的accept()方法,等待客户端的连接,并得到Socket管道对象。
通过Socket对象调用getInputStream()方法得到字节输入流、完成数据的接收。
释放资源:关闭socket管道
- /**
- 目标:开发Socket网络编程入门代码的服务端,实现接收消息
- */
- public class ServerDemo2 {
- public static void main(String[] args) {
- try {
- System.out.println("===服务端启动成功===");
- // 1、注册端口
- ServerSocket serverSocket = new ServerSocket(7777);
- // 2、必须调用accept方法:等待接收客户端的Socket连接请求,建立Socket通信管道
- Socket socket = serverSocket.accept();
- // 3、从socket通信管道中得到一个字节输入流
- InputStream is = socket.getInputStream();
- // 4、把字节输入流包装成缓冲字符输入流进行消息的接收
- BufferedReader br = new BufferedReader(new InputStreamReader(is));
- // 5、按照行读取消息
- String msg;
- if ((msg = br.readLine()) != null){
- System.out.println(socket.getRemoteSocketAddress() + "说了:: " + msg);
- }
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- }
客户端怎么发,服务端就应该怎么收。
客户端如果没有发消息,服务端会进入阻塞等待。
Socket一方关闭或者出现异常、对方Socket也会失效或者出错。