前面讲了,网络连接分为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边都阻塞住了,程序便"死"了,那就不好了。
分享到:
相关推荐
【说明】这是一段完成电脑通信的客户端代码,不是独立软件,如果你不理解前面的描述,说明不是你想要的东西,不用询问这玩意是什么东西 特别说明,要求装有visual Studio2017或更高版本 ,Socket通信框架; 客户端部分...
Socket通信框架,客户端部分,...【说明】这是一段完成电脑通信的客户端代码,不是独立软件,如果你不理解前面的描述,说明不是你想要的东西,不用询问这玩意是什么东西 特别说明,要求装有visual Studio2017或更高版本
本项目利用Socket通信机制实现了远程DOS(Disk Operating System)控制,即在客户端发送命令,服务器端接收并执行这些命令,然后将执行结果反馈回客户端。下面我们将深入探讨这个过程涉及的技术点。 首先,Socket是...
而当我们谈论“SOCKET异步服务”时,我们主要讨论的是如何利用异步I/O模型来构建高效的Socket通信服务。 异步Socket服务与同步Socket服务的主要区别在于处理I/O操作的方式。在同步模式下,程序在执行I/O操作(如...
什么是HPSocket HP-Socket 是一套通用的高性能 TCP/UDP 通信框架,包含服务端组件、客户端组件和Agent组件,广泛适用于各种不同应用场景的 TCP/UDP 通信系统,提供 C/C++、C#、Delphi、E(易语言)、Java、Python 等...
什么是HPSocket HP-Socket 是一套通用的高性能 TCP/UDP 通信框架,包含服务端组件、客户端组件和Agent组件,广泛适用于各种不同应用场景的 TCP/UDP 通信系统,提供 C/C++、C#、Delphi、E(易语言)、Java、Python 等...
W5500有线网卡驱动电路原理图及PCB文件(PADS文件),亲测可用。w5500模块类似于一个网卡,它里面用硬件集成有tcp/ip协议这样就...设置好即可进行tcp、udp通信连接,而要设置好上面所说的这些玩意,一定是要用spi来设置。
有个朋友发邮件问我在本机测试时为什么服务器开了,客户端死活连不上去,这次服务器启动监听后会打印出绑定到的IP地址及端口号,这样貌似就可以解决了吧。。。。 程序运行需要.NET Framework2.0的支持,以后不会再...
1. **套接字编程**:C++中的套接字库(如`<sys/socket.h>`和`<netinet/in.h>`)是实现网络通信的基础。开发者需要理解和使用socket接口,包括创建套接字、绑定IP地址和端口、监听连接请求以及接受新的连接。 2. **...