TCP与UCP协议,及socket编程

TCP与UCP协议,及socket编程

TCPTranfer Control Protocol的 简称,是一种面向连接的保证可靠传输的协议。通过TCP协议传输,得到的是一个顺序的无差错的数据流。发送方和接收方的成对的两个socket之间必须建 立连接,以便在TCP协议的基础上进行通信,当一个socket(通常都是server socket)等待建立连接时,另一个socket可以要求进行连接,一旦这两个socket连接起来,它们就可以进行双向数据传输,双方都可以进行发送 或接收操作。

UDPUser Datagram Protocol的简称,是一种无连接的协议,每个数据报都是一个独立的信息,包括完整的源地址或目的地址,它在网络上以任何可能的路径传往目的地,因此能否到达目的地,到达目的地的时间以及内容的正确性都是不能被保证的。

UDP:1,每个数据报中都给出了完整的地址信息,因此无需要建立发送方和接收方的连接。

            2,UDP传输数据时是大小限制的,每个被传输的数据报必须限定在64KB之内

           3,UDP是一个不可靠的协议,发送方所发送的数据报并不一定以相同的次序到达接收方

TCP:1,面向连接的协议,在socket之间进行数据传输之前必然要建立连接,所以在TCP中需要连接

                时间。

            2,TCP传输数据大小限制,一旦连接建立起来,双方的socket就可以按统一的格式传输大的  

                    数据。

             3,TCP是一个可靠的协议,它确保接收方完全正确地获取发送方所发送的全部数据。

代码:服务器端:

package com.liuxin.test;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;

public class SocketServer {
	public static void main(String args[]){
		ServerSocket ss=null;
		try {
			ss=new ServerSocket(4700);
		} catch (IOException e) {
			System.err.println("can not listen to"+e);
		}
		Socket socket=null;
		try {
			socket=ss.accept();//有请求则创建一个Socket对象,并继续执行
		} catch (IOException e) {
			System.err.println(e);
		}
		try {
			BufferedReader br=new BufferedReader(new InputStreamReader(socket.getInputStream(),"gbk"));//把socket的输入流内容放到br对象中
			
			PrintWriter pw=new PrintWriter(socket.getOutputStream()); //把socket的输出流内容放到pw对象中
			BufferedReader sin=new BufferedReader(new InputStreamReader(System.in,"gbk"));//由系统标准输入设备构造BufferedWrite对象
			
			System.out.println("client:"+br.readLine());//打印客户端输入的文字
			String line=sin.readLine();
			while(!line.equals("bye")){//读取到bye则停止循环
				pw.println(line);
				pw.flush();//刷新输出流,使client马上收到该字符串
				System.out.println("Server:"+line);
				
				System.out.println("Client:"+br.readLine());//从Client读入一字符串,并打印到标准输出上
				line=sin.readLine();
				//从系统标准输入读入一字符串
			}
			pw.close(); //关闭Socket输出流

			br.close(); //关闭Socket输入流

			socket.close(); //关闭Socket

			ss.close(); //关闭ServerSocket
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}

}

客户端:

package com.liuxin.test;import java.io.BufferedReader;import java.io.InputStreamReader;import java.io.PrintWriter;import java.net.Socket;public class TalkClient {	public static void main(String args[]) {			try{						Socket socket=new Socket("127.0.0.1",4700);//向本机的4700端口发出客户请求						BufferedReader sin=new BufferedReader(new InputStreamReader(System.in));//由系统标准输入设备构造BufferedReader对象						PrintWriter os=new PrintWriter(socket.getOutputStream());//由Socket对象得到输出流,并构造PrintWriter对象						BufferedReader is=new BufferedReader(new InputStreamReader(socket.getInputStream()));//由Socket对象得到输入流,并构造相应的BufferedReader对象						String readline;						readline=sin.readLine(); //从系统标准输入读入一字符串						while(!readline.equals("bye")){//若从标准输入读入的字符串为 "bye"则停止循环						os.println(readline);//将从系统标准输入读入的字符串输出到Server						os.flush();//刷新输出流,使Server马上收到该字符串			System.out.println("Client:"+readline);//在系统标准输出上打印读入的字符串						System.out.println("Server:"+is.readLine());//从Server读入一字符串,并打印到标准输出上						readline=sin.readLine(); //从系统标准输入读入一字符串					} //继续循环			os.close(); //关闭Socket输出流			is.close(); //关闭Socket输入流			socket.close(); //关闭Socket		}catch(Exception e) {			System.out.println("Error"+e); //出错,则打印出错信息		}	}}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/106295.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 数据库课程设计 ——酒店管理系统「建议收藏」

    数据库课程设计 ——酒店管理系统「建议收藏」一、 需求分析1.软件需求(1)酒店管理系统用于满足酒店工作人员和管理人员的需求。(2)酒店管理人员和工作人员可以为酒店房间加入入住和退房记录,并生成相应的报表用于查阅,确认和保存,酒店工作人员可以浏览、查询、统计、添加酒店房间的入住离开信息。管理员可以查询房间信息、查询员工信息、更改房间信息、更改员工信息等。(3)客户可以申请入住酒店,酒店工作人员需要对客户的姓名、性别、身份证号、房间…

  • 轻松理解转置卷积(transposed convolution)或反卷积(deconvolution)「建议收藏」

    轻松理解转置卷积(transposed convolution)或反卷积(deconvolution)「建议收藏」原文地址:Up-samplingwithTransposedConvolution本文暂时没有插入图像,以后修订在CNN中,转置卷积是一种上采样(up-sampling)的方法.如果你对转置卷积感到困惑,那么就来读读这篇文章吧.本文的notebook代码在Github.上采样的需要在我们使用神经网络的过程中,我们经常需要上采样(up-sampling)来提高低…

  • 搜索网站

    搜索网站一、网盘搜索胖次百度网盘搜索引擎http://www.panc.cc/自称已索引13,614,209个百度网盘资源,有百度网盘失效链接解析功能,还有下载版的网盘搜索器。麦库搜索(目前功能受限制)http://www.baidu10.net/目前最好用的一个网盘搜索,引擎基于谷歌,可以搜索的网盘也很多,是较少能搜索快传和微云资源的网盘搜索引擎。同时,还有知乎搜索等独特…

  • js实现冒泡排序_js 冒泡排序

    js实现冒泡排序_js 冒泡排序冒泡排序原理:冒泡排序算法的原理如下: 比较相邻的元素。如果第一个比第二个大,就交换他们两个。 对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。 针对所有的元素重复以上的步骤,除了最后一个。 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比比较 白话就是:比如有6个数,你需要比较5趟,这……

    2022年10月10日
  • python if else if用法_python的循环语句有哪些

    python if else if用法_python的循环语句有哪些python中if语句的用法及if-else结构怎么使用发布时间:2020-08-2511:49:47来源:亿速云阅读:79python中if语句的用法及if-else结构怎么使用?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。if结构if结构允许程序做出选择,并根据不同的情况执行不同的操作基本用法比较运算符根据PEP8…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号