马士兵_Java_复习总结-----网络编程

TCP

      是专门设计用于在不可靠的因特网上提供可靠的,端到端的字节流通信的协议。它是一种面向连接的协议。TCP连接是字节流。

 

UDP

       UDP想应用程序提供了一种发送封装的原始IP数据报的方法,并且发送时无需建立连接。是一种不可靠的连接。

 

Socket

       两个JAVA应用程序通过一个双向的网络通信连接实现数据交换,这个双向链路的一段成为一个Socket。

       Socket通常用来实现client--server连接

       java.net包中定义的两个类Socket和ServerSocket,分别用来实现双相连接的client和server端

       建立连接时所需的寻址信息为远程计算机的IP地址和端口号(Port number)

 

       TCP端口和UDP端口是分开的,各自拥有65535个端口。

 

Socket的通信过程

       1.创建通讯双方的Socket连接,即分别为服务器和客户端创建Socket对象,建立Socket连接。

       2.打开连接到的Socket的输入流和输出流。

       3.按照一定的协议对Socket进行读写操作。

       4.读写操作结束后,关闭Socket连接。

 

TCP 通信模型

       

      服务器端:

              1.调用ServerSocket对象的accept方法侦听接受客户端的连接请求。

              2.创建与Socket对象绑定的输入输出流,并建立相应的数据输入输出流。

              3.通过数据输入输出流与客户端进行数据读写,完成双向通信。

              4.当客户端断开连接时,关闭各个流对象。

    客户端:

              1.创建指定服务器上指定端口号的Socket对象。

              2.创建与Socket对象绑定的输入输出流,并建立相应的数据输入输出流。

              3.通过数据输入输出流与服务器进行数据读写,完成双向通信。

              4.关闭与服务器的连接,关闭各个流对象,结束通信。

 

 

一个简单的例子

MyServer.java

import  java.io.*;
import  java.net.*;

public class MyServer{
	public static void main(String[] args){
		try{
			String s;
			//在端口2005注册服务
			ServerSocket server = new ServerSocket(2005);
			System.out.println("等待与客户端连接!");
			Socket socket = server.accept();//阻塞式侦听连接请求,等待连接
			System.out.println("与客户端连接成功!");
			//获得对应的Socket的输入输出流
			InputStream in = socket.getInputStream();
			OutputStream out = socket.getOutputStream();
			//建立数据流
			DataInputStream din = new DataInputStream(in);
			DataOutputStream dout = new DataOutputStream(out);
			BufferedReader sin = new BufferedReader(new InputStreamReader(System.in));
			while(true){
				s = din.readUTF();//读入从client传来的字符串
				System.out.println("从客户端接受的消息是:" + s);
				if(s.equals("bye")){
					System.out.println("成功退出服务端!");
					break;
				}
				System.out.println("请输入要发送的信息:");
				s = sin.readLine();//读取用户输入的字符串
				dout.writeUTF(s);//将读取的字符串传给client
				if (s.equals("bye")){
					System.out.println("成功退出服务端!");
					break;
				}
			}

			//关闭连接
			din.close();
			dout.close();
			in.close();
			out.close();
			socket.close();
		}catch(Exception e){
			System.out.println("Error:" + e);
		}
	}
}

 MyClient.java

import  java.io.*;
import  java.net.*;

public class MyClient{
	public static void main(String[] args){
		try{
			String s;
			//端口号应与服务器端口号一致
			Socket socket = new Socket("127.0.0.1", 2005);
			System.out.println("与服务器连接成功!");
			//获得对应socket的输入输出流
			InputStream in = socket.getInputStream();
			OutputStream out = socket.getOutputStream();
			//建立数据流
			DataInputStream din = new DataInputStream(in);
			DataOutputStream dout = new DataOutputStream(out);
			BufferedReader sin = new BufferedReader(new InputStreamReader(System.in));//阻塞式的等待显示器的输入
			while (true){
				System.out.println("请输入要发送的信息(输入 bye 退出):");
				s = sin.readLine();//读取用户输入的字符串
				dout.writeUTF(s);//将读取的字符串传给server
				if (s.equals("bye")){
					System.out.println("成功退出客户端!");
					break;
				}
				s = din.readUTF();//从服务器获得字符串
				if (s.equals("bye")){
					System.out.println("成功退出客户端!");
					break;
				}
				System.out.println("从服务端接受的消息是:" + s);
			}
			//关闭连接
			din.close();
			dout.close();
			in.close();
			socket.close();
		}catch (Exception e)
		{
			System.out.println(e);
		}
	}
}

 运行结果图:



 

 

 

 

 

 

欢迎光临我师傅小锋哥的网站 Java知识分享网 www.java1234.com     有大量Java资料供学习参考用,一切免费
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值