利用TCP与UDP实现通讯

TCP为传输控制协议,UDP为用户数据报协议。TCP是面向连接的通信协议,它提供两台计算机之间可靠无差错的数据传输。应用程序使用TCP进行通信时,数据源与目标之间将简历虚拟的连接,连接一旦简历,两台计算机之间就可以将数据作为双向字节流进行交换。TCP操作模式类似于打电话,只有确认对方接通后,才开始通话,且双方均能够听到对方的讲话内容。
UDP是无连接的通信协议,它不能保证可靠数据的传输,但能够实现向若干个目标发送数据功能。例如当A主机向B主机发送数据时,数据将立即发出,无论主机B是否已经准备接受。主机B的数据接受机制与主机A的发送机制类似,无论数据收到与否,它不再像主机A确认。UDP操作模式类似于传呼台向用户发送信息,传呼台本身对用户能否收到信息不可控,用户也不会像传呼台反馈是否收到信息。

Socket是网络驱动层为应用程序提供的接口和机制,其作用可以看做是为应用程序创建的港口码头。应用程序的任务是将装载货物的集装箱放在港口码头上,剩余工作交给货运公司去处理。接受数据时,应用程序同样需要创建港口码头,货物(数据)到达后,应用程序从码头取走货物即可。

TCP协议具体操作步骤如下:

1.服务器程序创建ServerSocket对象,调用accept()方法等待客户端连接。()

2.客户端程序创建Socket对象并请求与服务器建立连接。

3.服务器接受客户的连接请求,并创建新的Socket对象与客户端建立专线连接。

4.实现2.3步骤中简历连接的两个Socket在同一线程上对话。

5.服务器重新等待新的连接请求。

ServerSocket类

TCP网络服务器程序的编写,需要使用ServerSocket类创建服务器。主要方法如下

public static Thread currentThread() 构造方法 创建ServerSocket实例

public final String getName() 方法 等待客户端连接

public final void setPriority(int priority) 方法 返回服务器端的IP地址

public void start 方法 返回ServerSocket的关闭状态

public static void sleep(long m) 方法 关闭ServerSocket

服务端每次运行时均需调用accept()方法等待客户端连接,该方法执行后服务器端将进入阻塞状态,直到客户端再次连接。返回类型为Socket

Socket类

客户端必须创建Socket对象来简历与服务器的连接,每个Socket对象代表一个客户端。主要方法如下

public Socket(String host,int port) 构造方法 构造Socket对象,同事指定要连接服务器的主机名和端口号

public inputStream getInputStream() 方法 等待客户端连接

public OutputStream getOutputStream() 方法 返回服务器端的IP地址

public boolean isClosed() 方法 返回ServerSocket的关闭状态

public void close() 方法 关闭ServerSocket

TCP网络编程中的信息使用输入输出流的形式传递。

public class TcpServer {
	public static void main(String[] args) {
		ServerSocket server=null;
		Socket socket=null;
		BufferedReader in=null;
		PrintWriter out=null;
		try {
			server=new ServerSocket(8000);//服务器在8000端口上监听
			socket=server.accept();//接受客户端连接
			//得到客户端输入信息
			in=new BufferedReader(new InputStreamReader(socket.getInputStream()));
			//向客户端输出信息,true是自动刷新缓冲区
			out=new PrintWriter(socket.getOutputStream(),true);
			while (true) {
				out.println("已建立与服务器的连接");
				String info=in.readLine();
				System.out.println("客户端的输入是"+info);
			}
		} catch (IOException e) {
			e.printStackTrace();
		}finally{
			try {
				in.close();
				out.close();
				socket.close();
				server.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
}

示例中创建了一个在9000端口上等待连接的ServerSocket对象。在接收客户端的连接请求后,程序从与该客户端简历Socket对象中获得输入输出流,并通过输出流想客户端输出"已建立与服务器的连接"信息,通过输入流读取信息。

DOS窗口中运行telnet 127.0.0.1 9000进行与服务器通信 127.0.0.1带表本机 9000代表端口号,如下图

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值