前面讲了,网络连接分为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边都阻塞住了,程序便"死"了,那就不好了。
分享到:
相关推荐
在这个"Socket Model.rar_socket_socket 异步通信_线程 异步_通信 SOCKET"资源中,我们可以了解到如何构建一个基于Socket的异步通信模式,它利用了线程技术和队列管理来提高通信效率和响应速度。 首先,Socket是...
标题中的"socket.rar_lwip Socket_lwip stm32_lwip之socket udp_socketCANstm3"提到了几个关键的IT概念,分别是`lwip`、`Socket`、`stm32`、`lwip之socket_udp`以及`socketCANstm32`。这些关键词暗示了这篇内容可能...
在IT行业中,网络编程是不可或缺的一部分,特别是在C#开发中,TCP套接字(Socket)是实现客户端与服务器间通信的基础。本示例程序“TCPS.rar”关注的是使用C#进行TCP异步服务的实现,这对于构建高性能、高并发的网络...
Socket编程是实现不同计算机间进程通信的一种基础方式。本主题聚焦于Linux环境下的服务端与客户端Socket通信,让我们深入探讨这一重要知识点。 首先,`socket`是Unix和类Unix系统(包括Linux)中的一个API接口,它...
在标题"select_client.rar_Socket多线程通信_socket select_socket 多线程"中,我们可以推断这是一个关于如何利用Socket进行多线程通信的示例程序或者教程,可能包含了使用socket_select函数来管理多个并发连接的...
本教程将探讨如何使用C语言通过TCP Socket实现服务端与多个客户端之间的通信,特别是在Linux操作系统环境下。TCP(传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议,常用于实现设备间的稳定...
TCP套接字(TCP Socket)是网络编程中的一个重要概念,它是基于传输控制协议(TCP)的应用层接口,用于实现两台计算机之间的可靠、面向连接的数据通信。本教程将围绕TCP套接字,深入讲解相关知识,并以一个简单的TCP...
标题中的“hpsocket_delphi.rar_Delphi HPSOCKET_HPSocket_ZA9_delphi hpsocke”指的是一款基于Delphi开发的HPSocket SDK,这是一个网络通信库,特别适用于Delphi编程环境。HPSocket是高性能的跨平台网络通信组件集...
实现类似QQ的socket双向通信,另附两个TCP/UDP通讯栗子
Socket通信是计算机网络编程中的重要组成部分,特别是在C/C++编程中。它允许程序通过网络进行数据传输,构建客户端-服务器架构。"好例子网_socketcommunicate_socketcommunicate_socket通信_"这个标题表明这是一个...
TCP socket客户端是网络通信的一端,它通过TCP协议与服务器建立连接,发送和接收数据。在TCP协议中,客户端首先发起连接请求,经过三次握手与服务器建立起连接,然后可以进行数据传输,最后通过四次挥手断开连接。这...
Socket通信是计算机网络编程中的重要组成部分,主要用于实现不同设备之间的数据传输。在本文中,我们将深入探讨基于Socket的TCP通信,包括如何建立连接、监听、发送和接收数据,以及如何利用编程语言和图形用户界面...
Socket是网络编程的基础,它提供了进程间通信(IPC)的能力,使得一台计算机上的程序能够与其他计算机上的程序进行通信。 Socket高并发: 高并发是指在同一时间处理大量连接请求的能力。在服务器开发中,为了处理...
本压缩包“Linux_Socket_Example.rar”聚焦于Linux下的C语言Socket编程,它是理解网络通信基础的关键。这里我们将深入探讨Linux Socket,以及如何通过C语言实现网络通信。 首先,Linux Socket是操作系统提供的一个...
而将UART与网络socket结合,可以实现串口数据与网络数据的互换,扩大通信范围,尤其适用于远程控制和监控系统。下面我们将深入探讨这个主题。 首先,`linux_uart___socket`标签表明我们关注的是在Linux操作系统中的...
首先,让我们了解什么是Socket。Socket在计算机网络中是一种通信协议,它允许两个网络应用程序之间建立连接并进行数据交换。在CS架构中,一个程序作为服务器监听特定端口上的连接请求,而另一个程序作为客户端发起...
在描述中提到的“socket通信的一些说明文档,非常详细”,这可能包括了关于如何在VC++环境中设置和使用Socket的各种教程、示例代码、技术文章或者API参考文档。这些文档可能涵盖了以下知识点: 1. **Winsock初始化*...
在IT行业中,网络通信是计算机科学的一个重要领域,而Socket编程是实现网络通信的基础。本教程将通过一个简单的C语言实现的Socket通信实例,讲解如何在VC++6.0环境下进行Socket编程。这个实例包括了服务端和服务端两...
在IT行业中,网络通信是不可或缺的一部分,而C++作为强大的编程语言,提供了多种方式来实现网络通信,其中就包括了Socket编程。标题“Class-Socket.zip_c++ Socket类_socket_socket class_socket封装_socket”以及...
在IT行业中,网络通信是至关重要的一个领域,而Socket编程是实现网络通信的基础。PowerBuilder是一种流行的、基于事件驱动的编程环境,尤其适用于构建数据库应用系统。本主题将深入探讨如何在PowerBuilder中利用...