javasocketJAVA 问题,用socket编写一个客户端程序

javasocket  时间:2021-07-20  阅读:()

java,socket连接和http连接的区别?

这个是网上转的,相互学习,楼主可以看看。

Java之Socket与HTTP区别 我们都知道TCP/IP协议共分四层: ① 链路层,有时也称作数据链路层或网络接口层,通常包括操作系统中的设备驱动程序和计算机中对应的网络接口卡。

它们一起处理与电缆(或其他任何传输媒介)的物理接口细节。

② 网络层,有时也称作互联网层,处理分组在网络中的活动,例如分组的选路。

在TCP/IP协议族中,网络层协议包括IP协议(网际协议),ICMP协议(互联网控制报文协议),以及IGMP协议(组管理协议)。

③ 传输层,主要为两台主机上的应用程序提供端到端的通信。

在TCP/IP协议族中,有两个互不相同的传输协议: TCP(传输控制协议)和UDP(用户数据报协议)。

TCP为两台主机提供高可靠性的数据通信。

它所做的工作包括把应用程序交给它的数据分成合适的小块交给下面的网络层,确认接收到的分组,设置发送最后确认分组的超时时钟等。

由于运输层提供了高可靠性的端到端的通信,因此应用层可以忽略所有这些细节。

而另一方面, U D P则为应用层提供一种非常简单的服务。

它只是把称作数据报的分组从一台主机发送到另一台主机,但并不保证该数据报能到达另一端。

任何必需的可靠性必须由应用层来提供。

这两种运输层协议分别在不同的应用程序中有不同的用途,这一点将在后面看到。

④ 应用层,负责处理特定的应用程序细节。

几乎各种不同的TCP/IP实现都会提供下面这些通用的应用程序: 远程登录。

FTP 文件传输协议。

SMTP 简单邮件传送协议。

SNMP 简单网络管理协议。

我们在传输数据时,可以只使用(传输层)TCP/IP协议,但是那样的话,如果没有应用层,便无法识别数据内容,如果想要使传输的数据有意义,则必须使用到应用层协议,应用层协议有很多,比如HTTP、FTP、TELNET等,也可以自己定义应用层协议。

WEB使用HTTP协议作应用层协议,以封装HTTP文本信息,然后使用TCP/IP做传输层协议将它发到网络上。

<1>Socket是一个针对TCP和UDP编程的接口,你可以借助它建立TCP连接等等。

而TCP和UDP协议属于传输层 。

而http是个应用层的协议,它实际上也建立在TCP协议之上(HTTP是轿车,提供了封装或者显示数据的具体形式;Socket是发动机,提供了网络通信的能力)。

<2>Socket是对TCP/IP协议的封装,Socket本身并不是协议,而是一个调用接口(API),通过Socket,我们才能使用TCP/IP协议。

Socket的出现只是使得程序员更方便地使用TCP/IP协议栈而已,是对TCP/IP协议的抽象,从而形成了我们知道的一些最基本的函数接口。

下面是一些的重要的概念,特在此做摘抄和总结。

一。

什么是TCP连接的三次握手 第一次握手:客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认; 第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态; 第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。

握手过程中传送的包里不包含数据,三次握手完毕后,客户端与服务器才正式开始传送数据。

理想状态下,TCP连接一旦建立,在通信双方中的任何一方主动关闭连接之前,TCP 连接都将被一直保持下去。

断开连接时服务器和客户端均可以主动发起断开TCP连接的请求,断开过程需要经过“四次握手”(过程就不细写了,就是服务器和客户端交互,最终确定断开) 二。

利用Socket建立网络连接的步骤 建立Socket连接至少需要一对套接字,其中一个运行于客户端,称为ClientSocket ,另一个运行于服务器端,称为ServerSocket 。

套接字之间的连接过程分为三个步骤:服务器监听,客户端请求,连接确认。

1。

服务器监听:服务器端套接字并不定位具体的客户端套接字,而是处于等待连接的状态,实时监控网络状态,等待客户端的连接请求。

2。

客户端请求:指客户端的套接字提出连接请求,要连接的目标是服务器端的套接字。

为此,客户端的套接字必须首先描述它要连接的服务器的套接字,指出服务器端套接字的地址和端口号,然后就向服务器端套接字提出连接请求。

3。

连接确认:当服务器端套接字监听到或者说接收到客户端套接字的连接请求时,就响应客户端套接字的请求,建立一个新的线程,把服务器端套接字的描述发给客户端,一旦客户端确认了此描述,双方就正式建立连接。

而服务器端套接字继续处于监听状态,继续接收其他客户端套接字的连接请求。

三。

HTTP链接的特点 HTTP协议即超文本传送协议(Hypertext Transfer Protocol ),是Web联网的基础,也是手机联网常用的协议之一,HTTP协议是建立在TCP协议之上的一种应用。

HTTP连接最显著的特点是客户端发送的每次请求都需要服务器回送响应,在请求结束后,会主动释放连接。

从建立连接到关闭连接的过程称为“一次连接”。

四。

TCP和UDP的区别 1。

TCP是面向链接的,虽然说网络的不安全不稳定特性决定了多少次握手都不能保证连接的可靠性,但TCP的三次握手在最低限度上(实际上也很大程度上保证了)保证了连接的可靠性;而UDP不是面向连接的,UDP传送数据前并不与对方建立连接,对接收到的数据也不发送确认信号,发送端不知道数据是否会正确接收,当然也不用重发,所以说UDP是无连接的、不可靠的一种数据传输协议。

2。

也正由于1所说的特点,使得UDP的开销更小数据传输速率更高,因为不必进行收发数据的确认,所以UDP的实时性更好。

知道了TCP和UDP的区别,就不难理解为何采用TCP传输协议的MSN比采用UDP的QQ传输文件慢了,但并不能说QQ的通信是不安全的,因为程序员可以手动对UDP的数据收发进行验证,比如发送方对每个数据包进行编号然后由接收方进行验证啊什么的,即使是这样,UDP因为在底层协议的封装上没有采用类似TCP的“三次握手”而实现了TCP所无法达到的传输效率。

用JAVA写一个SOCKET 接收TCP发来的消息

public class TalkServer{     public static void main(String args[]) {       try{         ServerSocket server=null;         try{           server=new ServerSocket(4700);         //创建一个ServerSocket在端口4700监听客户请求         }catch(Exception e) {           System.out.println("can not listen to:"+e);         //出错,打印出错信息         }         Socket socket=null;         try{           socket=ept();           //使用ept()阻塞等待客户请求,有客户           //请求到来则产生一个Socket对象,并继续执行         }catch(Exception e) {           System.out.println("Error."+e);           //出错,打印出错信息         }         String line;         BufferedReader is=new BufferedReader(new InputStreamReader(socket.getInputStream()));          //由Socket对象得到输入流,并构造相应的BufferedReader对象         PrintWriter os=newPrintWriter(socket.getOutputStream());          //由Socket对象得到输出流,并构造PrintWriter对象         BufferedReader sin=new BufferedReader(new InputStreamReader(System.in));          //由系统标准输入设备构造BufferedReader对象         System.out.println("Client:"+is.readLine());         //在标准输出上打印从客户端读入的字符串         line=sin.readLine();         //从标准输入读入一字符串         while(!line.equals("bye")){         //如果该字符串为 "bye",则停止循环           os.println(line);           //向客户端输出该字符串           os.flush();           //刷新输出流,使Client马上收到该字符串           System.out.println("Server:"+line);           //在系统标准输出上打印读入的字符串           System.out.println("Client:"+is.readLine());           //从Client读入一字符串,并打印到标准输出上           line=sin.readLine();           //从系统标准输入读入一字符串         }  //继续循环         os.close(); //关闭Socket输出流         is.close(); //关闭Socket输入流         socket.close(); //关闭Socket         server.close(); //关闭ServerSocket       }catch(Exception e){         System.out.println("Error:"+e);         //出错,打印出错信息       }     }   }

java编程中,Socket通信是怎么实现的?

java编程对于Socket之间的通信过程如下: 服务端往Socket的输出流里面写东西,客户端就可以通过Socket的输入流读取对应的内容。

Socket与Socket之间是双向连通的,所以客户端也可以往对应的Socket输出流里面写东西,然后服务端对应的Socket的输入流就可以读出对应的内容。

下面来看一些服务端与客户端通信的例子: public?class?Server?{ ???public?static?void?main(String?args[])?throws?IOException?{ ??????//为了简单起见,所有的异常信息都往外抛 ??????int?port?=?8899; ??????//定义一个ServerSocket监听在端口8899上 ??????ServerSocket?server?=?new?ServerSocket(port); ??????//server尝试接收其他Socket的连接请求,server的ept方法是阻塞式的 ??????Socket?socket?=?ept(); ??????//跟客户端建立好连接之后,我们就可以获取socket的InputStream,并从中读取客户端发过来的信息了。

??????Reader?reader?=?new?InputStreamReader(socket.getInputStream()); ??????char?chars[]?=?new?char[64]; ??????int?len; ??????StringBuilder?sb?=?new?StringBuilder(); ??????while?((len=reader.read(chars))?!=?-1)?{ ?????????sb.append(new?String(chars,?0,?len)); ??????} ??????System.out.println("from?client:?"?+?sb); ??????reader.close(); ??????socket.close(); ??????server.close(); ???} }客户端代码 Java代码??public?class?Client?{?? ???public?static?void?main(String?args[])?throws?Exception?{?? ??????//为了简单起见,所有的异常都直接往外抛?? ??????String?host?=?"127.0.0.1";??//要连接的服务端IP地址?? ??????int?port?=?8899;???//要连接的服务端对应的监听端口?? ??????//与服务端建立连接?? ??????Socket?client?=?new?Socket(host,?port);?? ??????//建立连接后就可以往服务端写数据了?? ??????Writer?writer?=?new?OutputStreamWriter(client.getOutputStream());?? ??????writer.write("Hello?Server.");?? ??????writer.flush();//写完后要记得flush?? ??????writer.close();?? ??????client.close();?? ???}?? }

JAVA 问题,用socket编写一个客户端程序

给你一个我写的示例,用的是基于TCP的Socket技术,你锻炼一下,改一改,不会改再找我! 客户端: import .Socket; import java.io.InputStream; import java.io.OutputStream; import java.io.InputStreamReader; import java.io.BufferedReader; public class TcpClient { public static void main(String[] args) throws Exception { //创建客户端Socket服务,并且制定主机和duank Socket s = new Socket("192.168.1.104",10002);//连接固定的主机和端口 //为了发送数据,获取Socket中的输入输出流 OutputStream out = s.getOutputStream(); InputStreamReader isr = new InputStreamReader(System.in); BufferedReader br = new BufferedReader(isr); String line = null; //读取服务器发过来的数据 InputStream in = s.getInputStream(); byte[] buf = new byte[1024]; while((line = br.readLine())!=null) { out.write(line.getBytes()); if("886".equals(line)) break; int len = in.read(buf); String content = new String(buf,0,len); System.out.println("Server:"+content); } s.close(); } } 服务器: /* * 需求分析: * 使用TCP协议,写服务器端。

做到服务器能收到客户端的信息,也能向客户端发送信息 * */ package JavaNetProgramming; import .ServerSocket; import .Socket; import java.io.InputStream; import java.io.OutputStream; import java.io.InputStreamReader; import java.io.BufferedReader; public class TcpServer { public static void main(String[] args) throws Exception { //建立服务器的Socket服务,并且监听一个端口 ServerSocket ss = new ServerSocket(10002); Socket s = ept(); InputStream is = s.getInputStream(); //从服务器端向客户端发送数据 OutputStream out = s.getOutputStream(); InputStreamReader isr = new InputStreamReader(System.in); BufferedReader br = new BufferedReader(isr); String line = null; while(true) { //通过ept()方法获得客户端传过来的Socket对象 // System.out.println("getByNanme():"+Address()); System.out.print("getHostAddress():"+Address().getHostAddress()); //获取客户端发过来的数据,就要使用客户端对象的读取流来读取数据 byte[] buf = new byte[1024]; int len = is.read(buf);//把流中数据读到字节数组中 String content = new String(buf,0,len); System.out.println(" "+content); if("886".equals(content)) break; while((line = br.readLine())!=null) { out.write(line.getBytes()); break; } } s.close(); //循环内有判断语句,这句话才不出错 ss.close(); } }

天上云月付572元,起香港三网CN2直连,独立服务器88折优惠,香港沙田机房

天上云怎么样?天上云隶属于成都天上云网络科技有限公司,是一家提供云服务器及物理服务器的国人商家,目前商家针对香港物理机在做优惠促销,香港沙田机房采用三网直连,其中电信走CN2,带宽为50Mbps,不限制流量,商家提供IPMI,可以自行管理,随意安装系统,目前E3-1225/16G的套餐低至572元每月,有做大规模业务的朋友可以看看。点击进入:天上云官方网站天上云香港物理机服务器套餐:香港沙田数据中...

Hostodo,美国独立日特价优惠,四款特价VPS云服务器7折,KVM虚拟架构,NVMe阵列,1核512M内存1Gbps带宽3T月流量,13.99美元/月,赠送DirectAdmin授权

Hostodo近日发布了美国独立日优惠促销活动,主要推送了四款特价优惠便宜的VPS云服务器产品,基于KVM虚拟架构,NVMe阵列,1Gbps带宽,默认分配一个IPv4+/64 IPv6,采用solusvm管理,赠送收费版DirectAdmin授权,服务有效期内均有效,大致约为7折优惠,独立日活动时间不定,活动机型售罄为止,有需要的朋友可以尝试一下。Hostodo怎么样?Hostodo服务器好不好?...

丽萨主机122元/每季,原生IP,CN2 GIA网络

萨主机(lisahost)新上了美国cn2 gia国际精品网络 – 精品线路,支持解锁美区Netflix所有资源,HULU, DISNEY, StartZ, HBO MAX,ESPN, Amazon Prime Video等,同时支持Tiktok。套餐原价基础上加价20元可更换23段美国原生ip。支持Tiktok。成功下单后,在线充值相应差价,提交工单更换美国原生IP。!!!注意是加价20换原生I...

javasocket为你推荐
android半透明如何实现Android透明导航栏发送垃圾短信常见十一类垃圾短信内容spotlight搜索是什么spotlight是什么意思百度创业史简论《创业史》的思想内容.艺术手法北漂论坛请问北票有论坛吗智能公共广播系统智能广播系统怎么实现?cf服务器爆满为什么我穿越火线一进服务器就显示 该服务器爆满然后又显示操控人心怎样帮助别人让别人觉得欠我人情?qq空间克隆素材qq空间克隆500人同时满足500人在线的性能测试jmeter怎么设置线程和并发数
vps是什么 域名备案信息查询 服务器配置技术网 fastdomain 博客主机 申请个人网页 合肥鹏博士 linux空间 电信虚拟主机 微软服务器操作系统 如何注册阿里云邮箱 网通服务器 免费的asp空间 中国电信网络测速 qq金券 lamp架构 汤博乐 hdsky 新疆服务器 塔式服务器 更多