Scoket:TCP通讯模型
Socket编程模型是Java网络编程的基础,在Socket API的基础上,可以做出更多的网络应用程序,比如FTP、HTTP、QQ等通讯工具都可以通过Socket API来实现。
一、最简单的Socket编程模型:
package lavasoft.ex1;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
/**
* 最简单的ScoketServer
*
* @author leizhimin 2009-11-20 21:54:37
*/
public class TestServer {
public static void main(String[] args) throws IOException {
ServerSocket ss = new ServerSocket(9999);
while (true) {
System.out.println("------------");
Socket s = ss.accept();
System.out.println(s.getLocalPort() + " " + s.getPort() + " " + s.getLocalAddress().getHostAddress());
System.out.println(s.getInetAddress().getHostAddress() + ":" + s.getPort() + "客户端已经连接上了服务端ServerSocket!");
}
}
}
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
/**
* 最简单的ScoketServer
*
* @author leizhimin 2009-11-20 21:54:37
*/
public class TestServer {
public static void main(String[] args) throws IOException {
ServerSocket ss = new ServerSocket(9999);
while (true) {
System.out.println("------------");
Socket s = ss.accept();
System.out.println(s.getLocalPort() + " " + s.getPort() + " " + s.getLocalAddress().getHostAddress());
System.out.println(s.getInetAddress().getHostAddress() + ":" + s.getPort() + "客户端已经连接上了服务端ServerSocket!");
}
}
}
import java.io.IOException;
import java.net.Socket;
/**
* 最简单的Socket
*
* @author leizhimin 2009-11-20 22:04:40
*/
public class TestClient {
public static void main(String[] args) throws IOException {
for (int i = 0; i < 5; i++) {
Socket s = new Socket("192.168.1.101", 9999);
s.close();
}
}
}
import java.net.Socket;
/**
* 最简单的Socket
*
* @author leizhimin 2009-11-20 22:04:40
*/
public class TestClient {
public static void main(String[] args) throws IOException {
for (int i = 0; i < 5; i++) {
Socket s = new Socket("192.168.1.101", 9999);
s.close();
}
}
}
先启动服务端,然后再启动客户端。
服务端的控制台显示:
------------
9999 1863 192.168.1.101
192.168.1.101:1863客户端已经连接上了服务端ServerSocket!
------------
9999 1864 192.168.1.101
192.168.1.101:1864客户端已经连接上了服务端ServerSocket!
------------
9999 1865 192.168.1.101
192.168.1.101:1865客户端已经连接上了服务端ServerSocket!
------------
9999 1866 192.168.1.101
192.168.1.101:1866客户端已经连接上了服务端ServerSocket!
------------
9999 1867 192.168.1.101
192.168.1.101:1867客户端已经连接上了服务端ServerSocket!
------------
9999 1863 192.168.1.101
192.168.1.101:1863客户端已经连接上了服务端ServerSocket!
------------
9999 1864 192.168.1.101
192.168.1.101:1864客户端已经连接上了服务端ServerSocket!
------------
9999 1865 192.168.1.101
192.168.1.101:1865客户端已经连接上了服务端ServerSocket!
------------
9999 1866 192.168.1.101
192.168.1.101:1866客户端已经连接上了服务端ServerSocket!
------------
9999 1867 192.168.1.101
192.168.1.101:1867客户端已经连接上了服务端ServerSocket!
------------
客户端的没有输出。
二、服务端向客户端发送数据,客户端接收数据
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
/**
* 向客户端发送数据
*
* @author leizhimin 2009-11-21 0:28:42
*/
public class TestServer {
public static void main(String[] args) throws IOException {
ServerSocket ss = new ServerSocket(9999);
while (true) {
System.out.println("--------------server端------------");
Socket s = ss.accept();
DataOutputStream dos = new DataOutputStream(s.getOutputStream());
System.out.println("客户端[" + s.getInetAddress().getHostAddress() + ":" + s.getPort() + "]已经连接!");
dos.writeUTF("服务端写入客户端的数据:客户端[" + s.getInetAddress().getHostAddress() +":" + s.getPort() + "]已经连接上服务端[" + s.getLocalAddress().getHostAddress() + ":" + s.getLocalPort() + "]!");
dos.flush();
dos.close();
s.close();
}
}
}
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
/**
* 向客户端发送数据
*
* @author leizhimin 2009-11-21 0:28:42
*/
public class TestServer {
public static void main(String[] args) throws IOException {
ServerSocket ss = new ServerSocket(9999);
while (true) {
System.out.println("--------------server端------------");
Socket s = ss.accept();
DataOutputStream dos = new DataOutputStream(s.getOutputStream());
System.out.println("客户端[" + s.getInetAddress().getHostAddress() + ":" + s.getPort() + "]已经连接!");
dos.writeUTF("服务端写入客户端的数据:客户端[" + s.getInetAddress().getHostAddress() +":" + s.getPort() + "]已经连接上服务端[" + s.getLocalAddress().getHostAddress() + ":" + s.getLocalPort() + "]!");
dos.flush();
dos.close();
s.close();
}
}
}
import java.io.DataInputStream;
import java.io.IOException;
import java.net.Socket;
/**
* 客户端接收服务端数据
*
* @author leizhimin 2009-11-21 0:28:53
*/
public class TestClient {
public static void main(String[] args) throws IOException {
System.out.println("--------------client端------------");
for (int i = 0; i < 5; i++) {
Socket s = new Socket("192.168.1.101", 9999);
DataInputStream dis = new DataInputStream(s.getInputStream());
System.out.println("客户端接收的服务端数据:" + dis.readUTF());
dis.close();
s.close();
}
}
}
import java.io.IOException;
import java.net.Socket;
/**
* 客户端接收服务端数据
*
* @author leizhimin 2009-11-21 0:28:53
*/
public class TestClient {
public static void main(String[] args) throws IOException {
System.out.println("--------------client端------------");
for (int i = 0; i < 5; i++) {
Socket s = new Socket("192.168.1.101", 9999);
DataInputStream dis = new DataInputStream(s.getInputStream());
System.out.println("客户端接收的服务端数据:" + dis.readUTF());
dis.close();
s.close();
}
}
}
服务端控制台:
--------------server端------------
客户端[192.168.1.101:1868]已经连接!
--------------server端------------
客户端[192.168.1.101:1869]已经连接!
--------------server端------------
客户端[192.168.1.101:1870]已经连接!
--------------server端------------
客户端[192.168.1.101:1871]已经连接!
--------------server端------------
客户端[192.168.1.101:1872]已经连接!
--------------server端------------
客户端[192.168.1.101:1868]已经连接!
--------------server端------------
客户端[192.168.1.101:1869]已经连接!
--------------server端------------
客户端[192.168.1.101:1870]已经连接!
--------------server端------------
客户端[192.168.1.101:1871]已经连接!
--------------server端------------
客户端[192.168.1.101:1872]已经连接!
--------------server端------------
客户端控制台:
--------------client端------------
客户端接收的服务端数据:服务端写入客户端的数据:客户端[192.168.1.101:1868]已经连接上服务端[192.168.1.101:9999]!
客户端接收的服务端数据:服务端写入客户端的数据:客户端[192.168.1.101:1869]已经连接上服务端[192.168.1.101:9999]!
客户端接收的服务端数据:服务端写入客户端的数据:客户端[192.168.1.101:1870]已经连接上服务端[192.168.1.101:9999]!
客户端接收的服务端数据:服务端写入客户端的数据:客户端[192.168.1.101:1871]已经连接上服务端[192.168.1.101:9999]!
客户端接收的服务端数据:服务端写入客户端的数据:客户端[192.168.1.101:1872]已经连接上服务端[192.168.1.101:9999]!
Process finished with exit code 0
客户端接收的服务端数据:服务端写入客户端的数据:客户端[192.168.1.101:1868]已经连接上服务端[192.168.1.101:9999]!
客户端接收的服务端数据:服务端写入客户端的数据:客户端[192.168.1.101:1869]已经连接上服务端[192.168.1.101:9999]!
客户端接收的服务端数据:服务端写入客户端的数据:客户端[192.168.1.101:1870]已经连接上服务端[192.168.1.101:9999]!
客户端接收的服务端数据:服务端写入客户端的数据:客户端[192.168.1.101:1871]已经连接上服务端[192.168.1.101:9999]!
客户端接收的服务端数据:服务端写入客户端的数据:客户端[192.168.1.101:1872]已经连接上服务端[192.168.1.101:9999]!
Process finished with exit code 0
三、两端同时读写数据
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
/**
* 服务端先写后读数据
*
* @author leizhimin 2009-11-21 23:37:59
*/
public class TestServer {
public static void main(String[] args) throws IOException {
ServerSocket ss = new ServerSocket(9999);
while (true) {
System.out.println("--------------server端------------");
Socket s = ss.accept();
DataInputStream dis = new DataInputStream(s.getInputStream());
DataOutputStream dos = new DataOutputStream(s.getOutputStream());
System.out.println("客户端[" + s.getInetAddress().getHostAddress() + ":" + s.getPort() + "]已经连接!");
dos.writeUTF("服务端写入客户端的数据:客户端[" + s.getInetAddress().getHostAddress() +":" + s.getPort() + "]已经连接上服务端[" + s.getLocalAddress().getHostAddress() + ":" + s.getLocalPort() + "]!");
String _clientdata = null;
if ((_clientdata = dis.readUTF()) != null)
System.out.println("读取客户端发送的数据:" + _clientdata);
dis.close();
dos.flush();
dos.close();
s.close();
}
}
}
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
/**
* 服务端先写后读数据
*
* @author leizhimin 2009-11-21 23:37:59
*/
public class TestServer {
public static void main(String[] args) throws IOException {
ServerSocket ss = new ServerSocket(9999);
while (true) {
System.out.println("--------------server端------------");
Socket s = ss.accept();
DataInputStream dis = new DataInputStream(s.getInputStream());
DataOutputStream dos = new DataOutputStream(s.getOutputStream());
System.out.println("客户端[" + s.getInetAddress().getHostAddress() + ":" + s.getPort() + "]已经连接!");
dos.writeUTF("服务端写入客户端的数据:客户端[" + s.getInetAddress().getHostAddress() +":" + s.getPort() + "]已经连接上服务端[" + s.getLocalAddress().getHostAddress() + ":" + s.getLocalPort() + "]!");
String _clientdata = null;
if ((_clientdata = dis.readUTF()) != null)
System.out.println("读取客户端发送的数据:" + _clientdata);
dis.close();
dos.flush();
dos.close();
s.close();
}
}
}
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;
/**
* 客户端先读后写数据
*
* @author leizhimin 2009-11-21 23:43:05
*/
public class TestClient {
public static void main(String[] args) throws IOException {
System.out.println("--------------client端------------");
for (int i = 0; i < 5; i++) {
Socket s = new Socket("192.168.1.101", 9999);
DataInputStream dis = new DataInputStream(s.getInputStream());
DataOutputStream dos = new DataOutputStream(s.getOutputStream());
String _serverdata = null;
if ((_serverdata = dis.readUTF()) != null)
System.out.println("客户端接收的服务端数据:" + _serverdata);
dos.writeUTF("[" + s.getLocalAddress().getHostAddress() + ":" + s.getLocalPort() + "]:Hello Server!");
dos.flush();
dos.close();
dis.close();
s.close();
}
}
}
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;
/**
* 客户端先读后写数据
*
* @author leizhimin 2009-11-21 23:43:05
*/
public class TestClient {
public static void main(String[] args) throws IOException {
System.out.println("--------------client端------------");
for (int i = 0; i < 5; i++) {
Socket s = new Socket("192.168.1.101", 9999);
DataInputStream dis = new DataInputStream(s.getInputStream());
DataOutputStream dos = new DataOutputStream(s.getOutputStream());
String _serverdata = null;
if ((_serverdata = dis.readUTF()) != null)
System.out.println("客户端接收的服务端数据:" + _serverdata);
dos.writeUTF("[" + s.getLocalAddress().getHostAddress() + ":" + s.getLocalPort() + "]:Hello Server!");
dos.flush();
dos.close();
dis.close();
s.close();
}
}
}
服务端控制台:
--------------server端------------
客户端[192.168.1.101:1873]已经连接!
读取客户端发送的数据:[192.168.1.101:1873]:Hello Server!
--------------server端------------
客户端[192.168.1.101:1874]已经连接!
读取客户端发送的数据:[192.168.1.101:1874]:Hello Server!
--------------server端------------
客户端[192.168.1.101:1875]已经连接!
读取客户端发送的数据:[192.168.1.101:1875]:Hello Server!
--------------server端------------
客户端[192.168.1.101:1876]已经连接!
读取客户端发送的数据:[192.168.1.101:1876]:Hello Server!
--------------server端------------
客户端[192.168.1.101:1877]已经连接!
读取客户端发送的数据:[192.168.1.101:1877]:Hello Server!
--------------server端------------
客户端[192.168.1.101:1873]已经连接!
读取客户端发送的数据:[192.168.1.101:1873]:Hello Server!
--------------server端------------
客户端[192.168.1.101:1874]已经连接!
读取客户端发送的数据:[192.168.1.101:1874]:Hello Server!
--------------server端------------
客户端[192.168.1.101:1875]已经连接!
读取客户端发送的数据:[192.168.1.101:1875]:Hello Server!
--------------server端------------
客户端[192.168.1.101:1876]已经连接!
读取客户端发送的数据:[192.168.1.101:1876]:Hello Server!
--------------server端------------
客户端[192.168.1.101:1877]已经连接!
读取客户端发送的数据:[192.168.1.101:1877]:Hello Server!
--------------server端------------
客户端控制台:
--------------client端------------
客户端接收的服务端数据:服务端写入客户端的数据:客户端[192.168.1.101:1873]已经连接上服务端[192.168.1.101:9999]!
客户端接收的服务端数据:服务端写入客户端的数据:客户端[192.168.1.101:1874]已经连接上服务端[192.168.1.101:9999]!
客户端接收的服务端数据:服务端写入客户端的数据:客户端[192.168.1.101:1875]已经连接上服务端[192.168.1.101:9999]!
客户端接收的服务端数据:服务端写入客户端的数据:客户端[192.168.1.101:1876]已经连接上服务端[192.168.1.101:9999]!
客户端接收的服务端数据:服务端写入客户端的数据:客户端[192.168.1.101:1877]已经连接上服务端[192.168.1.101:9999]!
Process finished with exit code 0
客户端接收的服务端数据:服务端写入客户端的数据:客户端[192.168.1.101:1873]已经连接上服务端[192.168.1.101:9999]!
客户端接收的服务端数据:服务端写入客户端的数据:客户端[192.168.1.101:1874]已经连接上服务端[192.168.1.101:9999]!
客户端接收的服务端数据:服务端写入客户端的数据:客户端[192.168.1.101:1875]已经连接上服务端[192.168.1.101:9999]!
客户端接收的服务端数据:服务端写入客户端的数据:客户端[192.168.1.101:1876]已经连接上服务端[192.168.1.101:9999]!
客户端接收的服务端数据:服务端写入客户端的数据:客户端[192.168.1.101:1877]已经连接上服务端[192.168.1.101:9999]!
Process finished with exit code 0
注意:
对于TCP Socket程序,应该先启动Server,然后再启动Client。
对于发送接收数据,一定要注意读写的顺序,否则会发生相互等待的问题。
相关推荐
- SuperSocket为TCP应用提供了一套完整的事件驱动模型,如连接建立、数据接收、断开连接等,开发者只需关注这些事件的处理即可。 - 它提供了简单易用的API,如`Server.Start()`启动服务器,`Session.Send()`发送...
本篇文章将深入探讨异步Socket在TCP通讯服务器中的应用,以及如何使用这种技术来管理客户端连接并进行有效通信。 首先,我们需要了解什么是Socket。Socket是网络通信中的一个抽象概念,它代表了两个端点之间的连接...
异步Socket编程是实现TCP通讯的一种高效方法,尤其适用于处理大量并发连接和I/O操作的情况。本篇文章将深入探讨异步Socket方式实现TCP通讯的基本原理、步骤以及相关知识点。 一、异步Socket概述 异步Socket编程的...
本主题将深入探讨如何使用C#的异步Socket实现TCP网络服务的CS通讯构架。首先,我们需要理解什么是Socket和TCP协议。 Socket,通常被称为套接字,是网络编程中的基本接口,允许应用程序通过网络进行通信。它提供了...
2. 异步Socket通信:异步Socket采用事件驱动模型,允许客户端和服务端同时处理多个请求,提高系统并发性。在.NET中,可以通过I/O completion ports (IOCP) 或异步方法(如BeginSend、BeginReceive)来实现。 对于...
**SuperSocket Socket C# 通讯详解** 在C#编程领域,网络通信是一个不可或缺的部分,而SuperSocket则是一个强大且易用的.NET Socket服务器框架。它为开发者提供了构建自定义网络应用服务的基础,使得处理TCP连接变...
在TCP/IP模型中,Socket工作在传输层,提供了进程间的网络通信。Socket分为两种类型:流式Socket(SOCK_STREAM,基于TCP)和数据报Socket(SOCK_DGRAM,基于UDP)。在这个场景下,我们主要关注流式Socket,因为TCP是...
总结来说,使用C#的异步Socket编程实现TCP网络服务的C/S通讯构架,需要设计和实现一系列辅助类,通过事件驱动模型增强网络通信的灵活性和可靠性。通过这样的方式,可以构建出稳定且可扩展的网络应用程序。同时,良好...
以下是对"TCP异步SOCKET通讯类"的详细解释: 1. **TCP基础**:TCP是一种面向连接的、可靠的传输协议,它保证了数据包在传输过程中的顺序和完整性。通过三次握手建立连接,四次挥手断开连接。 2. **Socket类**:在...
在TCP/IP模型中,Socket接口提供了应用程序与传输层的交互方法。TCP(Transmission Control Protocol)是面向连接的协议,保证数据的可靠传输,而UDP(User Datagram Protocol)则是无连接的,提供快速但不保证的...
Socket分为流式(Stream Socket,TCP)和数据报(Datagram Socket,UDP)两种类型,本系统可能采用了流式Socket,因为TCP协议能确保数据的有序、无丢失传输,适合即时通讯需求。 2. **TCP连接**:TCP(Transmission...
void handle_connection(boost::asio::ip::tcp::socket socket) { // 处理连接逻辑 } int main() { try { boost::asio::io_service io_service; boost::asio::ip::tcp::acceptor acceptor(io_service, boost:...
总结来说,`TcpSocket`和`Socket`在C#中提供了强大的TCP通信能力,结合异步编程模型,可以构建高效、可扩展的网络服务。通过以太网,这些网络通信可以跨越局域网甚至广域网,实现远程数据交换。在实际项目中,理解和...
TCP(Transmission Control Protocol)是一种面向连接的、可靠的、基于...总的来说,TCP实现的简单通讯涉及了网络通信的基本原理和Qt框架的网络编程接口,通过实践可以深入理解TCP协议的工作机制和Qt的网络编程模型。
这个"matlab_QT测试tcp通讯SOCKET实例程序_源码"的压缩包很可能是包含MATLAB和QT两个环境下的源代码,演示了如何在各自的环境中设置TCP客户端和服务器,进行数据交换。通过分析和运行这些源码,你可以深入理解TCP...
标题中的“C#异步TCP Socket通讯代码”是指利用C#的异步编程模型来实现TCP通信。异步编程在处理网络通信时尤为重要,因为它允许应用程序在等待I/O操作完成时继续执行其他任务,避免了线程阻塞,提高了程序的响应性和...
本篇将详细介绍“C# Tcp通讯服务控件”,它是一个用于简化TCP通信的自封装控件,方便开发者在项目中快速集成和定制。 首先,TCP(Transmission Control Protocol)是一种面向连接的、可靠的传输协议,它通过三次...
本篇将深入探讨"【Socket编程】--TCP异步通讯一服务器多客户端"这一主题。 TCP(Transmission Control Protocol)是一种面向连接的、可靠的传输协议,它确保了数据的顺序传输和错误检查。在TCP异步通讯中,服务器并...
**TCP/UDP Socket通讯协议详解** 在计算机网络编程中,TCP(Transmission Control Protocol)和UDP(User Datagram Protocol)是两种最常用的传输层协议,它们在客户端/服务器(C/S)模式下发挥着至关重要的作用。...