黑马基础 23 网络编程(TCP)

本文介绍了Java中进行TCP网络编程的基本概念,包括TCP客户端和服务器端的实现。TCP客户端使用Socket类建立连接,可能会遇到"Connection refused: connect"异常。而TCP服务端则使用ServerSocket类监听和接受连接,其accept()方法可能导致阻塞。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

网络编程(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.找不到主机;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值