初次学习socket,写了下面例子
public class SocketServer { public static void main(String[] args) { int port = 8089; ServerSocket server = null; InputStream in = null; Socket socket = null; try { server = new ServerSocket(port); System.out.println("server:服务端启动,端口 "+port); socket = server.accept(); in = socket.getInputStream(); byte[] b = new byte[1024]; int n = 0; StringBuilder sb = new StringBuilder(); while((n=in.read(b))!=-1){ sb.append(new String(b,0,n)); } System.out.println("server:我收到客户的msg-"+sb.toString()); } catch (IOException e) { e.printStackTrace(); }finally{ if(in !=null){ try { in.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } if(socket != null){ try { socket.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } if(server !=null){ try { server.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } }
public class SocketClient { public static void main(String[] args) { Socket socket = null; int port = 8089; String host ="127.0.0.1"; OutputStream out = null; try { socket = new Socket(host,port); System.out.println("client:我连接上了服务端"); out = socket.getOutputStream(); out.write("你好".getBytes()); } catch (UnknownHostException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }finally{ try { Thread.sleep(10000); if(out != null){ try { out.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } if(socket != null){ try { socket.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } catch (InterruptedException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } } } }
发现,当在客户端不close 相关的socket或输出流,服务端read会提示java.net.SocketException: Connection reset异常,这是由于client退出但是没有关闭连接导致。
当然,socket.shutdownOutputStream() 可以提示服务端,发送完成而不阻塞read
相关推荐
使用SuperSocket,你可以快速创建一个Socket服务端,处理来自客户端的连接请求。以下是一些关键步骤: 1. **安装SuperSocket**: 通过NuGet包管理器在你的C#项目中添加SuperSocket库。运行`Install-Package Super...
本教程将通过一个简单的Socket服务端和客户端程序,帮助初学者理解Socket编程的基本原理和操作流程。 首先,我们来解释一下Socket。Socket,通常称为套接字,是操作系统提供的一种接口,用于网络上不同计算机之间的...
6. **关闭连接**:当通信结束时,客户端和服务端都需要调用`close()`函数关闭Socket,释放网络资源。 在“ConsoleApplication1”这个文件中,很可能是包含了一个简单的C#控制台应用程序示例,演示了上述的客户端和...
- **编写客户端和服务器端代码**:创建能够正确建立Socket连接的客户端和服务端程序。 - **源代码附录**:提供完整的源代码,便于理解和验证。 #### 实验原理与设计 **Socket通信基础** - **Socket定义**:Socket...
一旦连接建立,Socket客户端就可以通过Socket实例的`getOutputStream()`方法获取输出流,用于向服务端发送数据。在这个场景中,我们提到的是发送DataSet对象。DataSet通常是在.NET框架中用于存储和操作数据库数据的...
这样,服务端可以在不阻塞的情况下处理多个客户端请求。 总的来说,C#的Socket编程提供了强大的工具,允许开发者构建复杂的网络应用,包括多客户端访问服务端的端口监听。理解TcpListener和TcpClient的工作原理,...
4. **多线程处理**:在一个服务器端对多个客户端的场景中,通常会使用多线程技术来处理每个客户端的连接,防止主线程被阻塞。可以为每个新的客户端连接创建一个新的线程,将`QTcpSocket`对象传递给该线程进行处理。 ...
本篇将深入探讨C#中如何实现TCP连接,包括客户端和服务端的TCP收发信息。 首先,TCP是一种面向连接的、可靠的传输协议,它确保了数据的顺序传输和错误校验。在C#中,我们主要通过System.Net.Sockets命名空间中的...
在Android客户端中,我们通常使用`java.net.Socket`类来创建Socket实例,以连接到服务端。首先,我们需要指定服务器的IP地址和端口号,然后调用`connect()`方法建立连接。以下是一个简单的示例: ```java Socket ...
- 由于Socket通信通常是阻塞式的,为了不影响用户界面,客户端和服务端的Socket读写操作应该在单独的线程中进行。 6. **安全性和性能优化** - 考虑到网络安全,可以使用SSL/TLS加密Socket(`SSLSocket`)以提高...
本教程将聚焦于Linux环境下的Socket编程,讲解如何通过C语言实现简单的客户端与服务端的交互,主要涉及TCP(Transmission Control Protocol)传输协议。 TCP是一种面向连接的、可靠的、基于字节流的传输层通信协议...
然后,通过调用`accept()`方法,服务端会阻塞等待直到有客户端尝试连接。一旦连接建立,`accept()`方法将返回一个新的`Socket`对象,用于与特定客户端的通信。 服务端的主要代码结构如下: ```java try ...
总之,利用C语言的TCP Socket在Linux下实现服务端向多客户端通信,需要理解套接字API的使用,掌握TCP连接的过程,以及如何在服务端处理并发连接。这个过程涉及的代码示例可以在提供的"服务端向多客户端通信"文件中...
在本文中,我们将深入探讨C#中的套接字(socket)编程,特别是在服务端与客户端之间的通信。套接字是网络编程的基础,它允许不同计算机上的应用程序之间进行数据交换。C#提供了System.Net.Sockets命名空间,其中包含...
当有客户端连接时,`BluetoothServerSocket.accept()`会阻塞,直到连接建立: ```java BluetoothSocket socket = serverSocket.accept(); ``` 5. **创建蓝牙客户端(客户端)** 客户端需要连接到服务器的蓝牙...
- 使用`accept()`方法接收客户端的连接请求,这会阻塞直到有客户端连接。 - 当客户端连接后,`accept()`返回一个新的`Socket`对象,服务器可以通过这个Socket与客户端通信。 - 读取Socket的输入流(`InputStream`...
在IT领域,网络编程是不可或缺的一部分,而Socket编程则是实现客户端与服务器通信的关键技术。本示例中的"SOCKET客户端 发送数据例子"是用C语言编写的,它封装了发送和接收数据的函数,与相应的服务端配合使用,构成...
在本主题中,我们将深入探讨"socket服务端和客户端通讯"的核心概念、步骤以及关键知识点。 首先,Socket是Internet上的应用程序之间进行通信的一种机制,它提供了一种标准接口,使得应用层可以直接与传输层进行交互...
创建Socket服务端的第一步是实例化一个Socket对象,并指定其使用的协议类型。在TCP/IP环境中,通常选择StreamSocket或TcpListener。这里我们使用TcpListener,它专门用于监听TCP连接请求。创建TcpListener时,需要...
- 监听连接:调用`server.accept()`函数,当有客户端连接时,返回一个Socket对象用于与客户端通信。 - 数据处理:在循环中接收客户端发送的数据,可以使用`socket.readBytes()`读取指定长度的字节,然后进行解析和...