`
白粥若水
  • 浏览: 103851 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

通信__Socket是什么玩意?

阅读更多

前面讲了,网络连接分为TCP连接和UDP连接,相应的,一般的网络编程分为TCP和UDP编程。作为一个初学者,首先需要了解的是TCP编程。

 

那么TCP编程到底是神马玩意?

 

TCP编程又叫做Socket编程(UDP也有Socket,但比较特殊,叫数据报式Socket,与这里的Socket有很大的不同。这里的Socket是流式Socket)。简单的说,TCP编程就是运用Socket的概念实现的面向连接的网络编程。Socket编程的概念用的很广,Windows上的网络编程叫做Socket编程,Linux上的网络编程也叫做Socket编程,当然Java中的网络编程也叫Socekt编程(这不是废话么!!!)

 

二个Java应用程序课通过一个双向的网络连接实现数据交互,这个网络链接的一端叫做一个Socket。

 

Socket的术语翻译是套接字,这个翻译不好理解。Socket的原版英文意思是"插座",事实上,我认为这个翻译还好些,比较形象:我们可以把无形的网络连接看做是有形的网线,Socket就是我们电脑上的网线插孔。

 

 

PS:小知识,Socket的开发包最初由 Berkeley大学的工作者开发出来,并在随后广泛运用于各种OS,各种语言(包括C,C++等)上的网络开发。在此,我们要向 Berkeley大学以及它为计算机界作出的伟大贡献致敬。

 

花开二朵,各表一支。不扯远了,接下来是Java中用Socket简单实现Server——Client通信模型,这是网络通信中的最最基本模型。

 

 

我们说,客户端Client是为客户写的,通过客户端,客户就能享受到程序提供的服务,比如,我们平常使用的QQ就是一个客户端,通过它,我们能聊天,群聊等等。服务端Server的作用是处理客户端发来的消息,并进行处理,还是用QQ举例子,它的服务端我们是接触不到的,但是我们在用我们电脑上的QQ客户端(好别扭哦,还是QQ吧),我们用QQ登陆时,便会向QQ服务端发送消息,服务端接收到消息后,分析消息,当消息格式正确,并且账号,密码都正确时,服务端便允许我们正常享受服务。

 

 

在Java中,我们说一个服务端就是一个java.net.ServerSocket对象。比如:

java.net.ServerSocket server = new java.net.ServerSocket(10000);

就创建了一个服务端,传入的参数就是这个程序所占用的端口号port。

 

 

当然,这个时候还只是创建了服务端,这个服务端并不能连接,我们可以这样:

java.new.Socket serverSocker = server.accept();

这不就创建了一个新的Scoket了么!!不过需要注意的是server.accept()是阻塞式的。意思是,当有"东西"试图连接上来的时候,该方法才会执行,否则,线程会卡到那。阻塞这个概念在以前学习的IO流当中也出现过。

 

 

接下来,我们来编写客户端Client来连接server。另写一个程序,注意,是另写一个程序,不是仅仅写另一个类。这样:

Socket clientSocket = new Socket(IP,port);

IP是运行Server程序的计算机的IP地址,我们可以通过在命令提示符中输入ipconfig来查询,同理,port是运行Server程序的端口号,我们这里是10000。当这句话执行时,便是与server建立了连接。

 

 

至此,Server——Client连接便建立起来了。

 

结束?? 没有啦,我们还没有传输数据啦

 

传输数据是通过IO流实现的。如Server端的IO可这样得到:

java.net.OutputStream ous = server.getOutputStream();得到输出流

java.net.InputStream in = server.getInputStream(); 得到输入流

客户端的IO流也同理得到。

 

 

然后我们便可以由以前学过的IO流只是来传输数据了。

 

 

最后,上面的程序还是有问题的,不能同时实现接收和发送,解决的办法便是线程Thread。具体实现略。同时,在上面的Socket serverSocket = server.accpt();外面加一个循环就能实现服务端与多个客户端的通信了。

 

加一句,通信过程中的流程大家一定要弄清楚,别到时2边都阻塞住了,程序便"死"了,那就不好了。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics