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(); } }

Gcore(75折)迈阿密E5-2623v4 CPU独立服务器

部落分享过多次G-core(gcorelabs)的产品及评测信息,以VPS主机为主,距离上一次分享商家的独立服务器还在2年多前,本月初商家针对迈阿密机房限定E5-2623v4 CPU的独立服务器推出75折优惠码,活动将在9月30日到期,这里再分享下。G-core(gcorelabs)是一家总部位于卢森堡的国外主机商,主要提供基于KVM架构的VPS主机和独立服务器租用等,数据中心包括俄罗斯、美国、日...

Letbox(35美元/年),美国洛杉矶VPS终身7折

Letbox 云服务商在前面的文章中其实也有多次介绍,这个服务商其实也算是比较老牌的海外服务商,几年前我也一直有使用过他们家的VPS主机,早年那时候低至年付15-35美元左右的VPS算式比较稀缺的。后来由于服务商确实比较多,而且也没有太多的网站需要用到,所以就没有续费,最近这个服务商好像有点活动就躁动的发布希望引起他人注意。这不有看到所谓的家中有喜事,应该是团队中有生宝宝了,所以也有借此来发布一些...

iHostART:罗马尼亚VPS/无视DMCA抗投诉vps;2核4G/40GB SSD/100M端口月流量2TB,€20/年

ihostart怎么样?ihostart是一家国外新商家,主要提供cPanel主机、KVM VPS、大硬盘存储VPS和独立服务器,数据中心位于罗马尼亚,官方明确说明无视DMCA,对版权内容较为宽松。有需要的可以关注一下。目前,iHostART给出了罗马尼亚vps的优惠信息,罗马尼亚VPS无视DMCA、抗投诉vps/2核4G内存/40GB SSD/100M端口月流量2TB,€20/年。点击直达:ih...

javasocket为你推荐
防恶意点击怎么才能做到防止恶意点击的行为发生呢?win7无线局域网关于用win7系统建立无线局域网美国大选投票实时数据在今年的美国总统选举中奥巴马和罗姆尼的选票各是多少买服务器买一个服务器要多少钱?智能机刷机软件安卓手机刷机,用什么软件最简单?微软将停止支持32位Win10系统你使用的Windows10即将终止服务是什么意思?iphone12或支持北斗导航苹果手机怎样下载北斗导航iphone12或支持北斗导航苹果12几个版本做视频的免费软件有没有免费做视频的软件 汉化的nero教程如何使用NERO刻碟
广东服务器租用 n点虚拟主机管理系统 腾讯云盘 arvixe lamp配置 搜狗12306抢票助手 最好看的qq空间 英文站群 idc资讯 php空间推荐 泉州移动 爱奇艺会员免费试用 域名dns 沈阳主机托管 云销售系统 wordpress空间 register.com 海外加速 asp.net虚拟主机 西部数码主机 更多