socket用于描述IP地址和端口,是一个通信链的句柄。在Internet上的主机一般运行了多个服务软件,同时提供几种服务。每种服务都打开一个Socket,并绑定到一个端口上,不同的端口对应于不同的服务。
java中当连接到一个套接字时,当前线程对被阻塞,直到建立连接或者超时为止。同样,当通过套接字读写数据时,当前线程也会被阻塞,直到操作成功或者超时。
本例:Client与Server之间的通信。
服务器端:
import java.io.IOException; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; import java.util.Scanner; public class EchoServer { private Scanner in; //服务器从客户端读入的流 private PrintWriter out; //服务器从客户端输出的流 private Scanner input; //从键盘中读取的数据 private boolean stop=false; public EchoServer(ServerSocket server) throws IOException{ Socket s=server.accept(); System.out.println("有一位客户端连接到服务器"); in=new Scanner(s.getInputStream()); out=new PrintWriter(s.getOutputStream()); input=new Scanner(System.in); out.println("连接服务器成功,输入BYE结束"); out.flush(); startRead(); //开启不断从客户端读取的进程 startWrite(); //开启不断向客户端写的进程 } private void startRead() { new Thread(new Runnable(){ @Override public void run() { while(!stop&&in.hasNextLine()){ String line=in.nextLine(); System.out.println("Client:"+line); if(line.equals("BYE")) stop=true; } } }).start(); } private void startWrite() { new Thread(new Runnable(){ @Override public void run() { while(!stop&&input.hasNextLine()){ String line=input.nextLine(); out.println(line); out.flush(); if(line.equals("BYE")) stop=true; } } }).start(); } }
import java.io.IOException; import java.net.ServerSocket; public class ServerSocketTest { public static void main(String[] args) throws IOException { ServerSocket server=new ServerSocket(8808); new EchoServer(server); } }
客户端程序:
import java.io.IOException; import java.io.PrintWriter; import java.net.Socket; import java.net.UnknownHostException; import java.util.Scanner; public class Client { private Socket s; private Scanner in; //客户端从服务器读入的流 private PrintWriter out; //客户端向服务器输出的流 private Scanner input; //从键盘中读取的数据 private boolean stop=false; public Client(int port) throws UnknownHostException, IOException{ s=new Socket("127.0.0.1",port); in=new Scanner(s.getInputStream()); out=new PrintWriter(s.getOutputStream()); input=new Scanner(System.in); startRead(); //开启不断从服务器读取的进程 startWrite(); //开启不断向服务器写的进程 } private void startRead() { new Thread(new Runnable(){ @Override public void run() { while(!stop&&in.hasNextLine()){ String line=in.nextLine(); System.out.println("Server:"+line); if(line.equals("BYE")) stop=true; } } }).start(); } private void startWrite() { new Thread(new Runnable(){ @Override public void run() { while(!stop&&input.hasNextLine()){ String line=input.nextLine(); out.println(line); out.flush(); if(line.equals("BYE")) stop=true; } } }).start(); } }
import java.io.IOException; import java.net.UnknownHostException; public class ClientTest { public static void main(String[] args) throws UnknownHostException, IOException{ new Client(8808); } }
运行结果(服务器端先运行):
服务器端:
有一位客户端连接到服务器
Client:你好
你好 我是服务器
你是谁
Client:我是客户端
Client:BYE
BYE
客户端:
Server:连接服务器成功,输入BYE结束
你好
Server:你好 我是服务器
Server:你是谁
我是客户端
BYE
Server:BYE
相关推荐
Socket通信在IT行业中是网络编程的基础,特别是在C#这样的多平台开发环境中,Socket通信库的使用至关重要。本实例,"C# Socket通信稳定完整版类库实例",为我们提供了一个全面且稳定的解决方案,用于实现客户端与...
在Windows环境下进行网络编程时,Socket通信是一种常用的技术。Socket接口是操作系统提供的网络通信API,允许应用程序通过TCP/IP协议栈与其他计算机进行数据交换。本文将详细介绍Windows下的Socket通信代码,包括...
**C++ Socket通信库** C++ Socket通信库是用于实现网络通信的一种工具,它基于操作系统提供的Socket接口,为开发者提供了一种在C++程序中进行网络数据交换的标准方法。Socket库简化了网络编程,允许程序员通过调用...
Android中socket通信简单实现 socket通信需要有一个服务器和客户端,可以把同一个APP作为服务器跟客户端,也可以分开成两个APP。 先上个图: 这里以一个APP作为服务器跟客户端为示例 1、添加网络访问权限 2、写...
Socket通信的基本步骤包括:创建ServerSocket,等待客户端连接,创建Socket对象,通过输入/输出流进行数据交换,最后关闭连接。 在Mina与Socket通信的实现中,服务端通常使用Mina来创建一个Acceptor,监听特定端口...
在MATLAB环境中实现Socket通信是将强大的MATLAB计算能力与网络通信功能相结合的重要技术。Socket是一种网络编程接口,它允许程序之间通过网络进行双向通信。MATLAB提供了丰富的工具和函数来支持Socket通信,使得用户...
Socket通信是一种基于TCP/IP协议族的网络通信方式,它允许两个网络应用程序通过网络进行数据交换。在本场景中,我们关注的是C#作为服务器端,Android作为客户端的Socket通信实现。这种通信方式常用于移动应用与后台...
在IT领域,Socket通信是一种基于TCP/IP协议族的网络编程接口,用于实现不同网络设备间的双向通信。在Java中,我们可以使用Java的Socket类和ServerSocket类来构建客户端和服务器端的通信。在这个场景中,我们将讨论...
"Android+PC Socket通信"指的是通过TCP Socket协议实现Android设备(手机客户端)与个人计算机之间的数据传输。Socket通信允许应用程序之间建立端到端的连接,进行双向数据交换,非常适合用于实时通讯、文件传输等...
在Android平台上进行网络通信时,Socket通信是一种常见且重要的方式,尤其在实现聊天应用时。本文将深入探讨如何在Android中实现基于Socket的客户端和服务端通信,以构建一个简单的聊天应用。 首先,让我们理解...
本教程将详细解释如何在Android中实现Java和C的Socket通信,特别是在涉及文件描述符传递的场景下。 1. **Java Socket基础** Java中的`java.net.Socket`类提供了网络通信的能力,它允许我们在两个应用程序之间建立...
Socket通信是一种基于网络协议(如TCP/IP)进行进程间通信的技术,它允许两台计算机通过互联网交换数据。在本文中,我们将深入探讨“点到点通信”中的Socket通信代码,包括服务端和客户端的实现。 首先,让我们了解...
Socket通信在IT行业中扮演着至关重要的角色,它是网络应用程序间通信的基础。HPSocketCS是一个专为.NET平台设计的高效、稳定的Socket通信框架,适用于开发跨平台的客户端和服务器端应用。本文将深入探讨HPSocketCS的...
Java和C++之间的Socket通信是跨语言网络编程的一个常见应用场景,尤其在系统集成、设备通讯或者混合编程中。Socket提供了一种基于TCP/IP协议的进程间通信(IPC)方式,可以实现在不同操作系统上的进程之间的数据传输...
Socket 通信异常解决总结 Socket 通信异常是指在网络通信过程中出现的各种错误和异常,包括网络连接断开、服务器端或客户端程序异常、网络链路异常等。这些异常会导致 Socket 连接断开,影响系统的稳定性和可靠性。...
本篇文章将详细探讨C#中如何使用AES加密进行Socket通信,以及涉及的TCP/IP协议。 首先,让我们了解Socket通信的基础。Socket是操作系统提供的网络编程接口,它允许应用程序通过TCP/IP协议发送和接收数据。在C#中,`...
基于Qt实现局域网Socket通信系统源码。分别有服务端(Server)和客户端(Client) 服务端默认监听本机IP的6666端口 本人实测在linux(需防火墙开启端口)和windows下完美运行。基于Qt实现局域网Socket通信系统源码。...
本项目涉及的"Linux C语言 socket通信聊天小程序"是一个基础的网络聊天应用,支持群聊和私聊功能。 首先,我们需要理解什么是Socket。Socket是网络编程的一个接口,它提供了进程间通信(IPC)的能力,特别是在网络...
Socket通信是一种基于TCP/IP协议族实现的网络通信方式,它允许两台计算机通过网络进行双向通信。在文件传输中,Socket通信提供了一种灵活、高效的方法,尤其适用于大数据量或者跨平台的文件交换。以下是对Socket通信...
在Android平台上,实现基于局域网的Socket通信是一项常见的任务,尤其在开发涉及设备间通信的应用时。Socket通信允许两台设备通过网络连接直接交换数据,而无需中间服务器。在这个项目中,我们关注的是Android设备...