`

Java Socket-03 Java TCP Socket

    博客分类:
  • JAVA
 
阅读更多

 

   Java 为 TCP 协议提供了两个类: Socket 类和 ServerSocket 类。 一个 Socket 实例代表了TCP 连接的一端。 一个 TCP 连接 ( TCP connec ti on ) 是一条抽象的双向信道, 两端分别由 IP地址和端口号确定。 在开始通信之前, 要建立一个 TCP 连 接, 这需要先由客户端 TCP 向服务器端 TCP 发送连接请求。 ServerSocket 实例则 监听 TCP 连 接请求,并为每个请求创建新的 Socket 实 例。也就是说,服务器端要同时处理 ServerSocket 实例 和 Socket 实例, 而客户端只需要使用 Socket 实例 。 

 

    典型的 TCP 客户端要经过下面三步:

1.创建一个 Socket 实例: 构造器向指定的远程主机和端口建立一个 TCP 连接。

2. 通过套接字的输入输出流(I/O streams)进行通信:一个 Socket 连接实例包括一个InputStream 和一个 OutputStream,它们的用法同于其他 Java 输入输出流。

3. 使用 Socket 类的 close()方法关闭连接。

 

    典型的 TCP 服务器有如下两步工作: 

1. 创建一个 ServerSocket 实例并指定本地端口。此套接字的功能是侦听该指定端口收到的连接。 

2. 重复执行: 

    a. 调用 ServerSocket 的 accept() 方法以获取下一个客户端连接。基于新建立的客户端连接,创建一个 Socket 实例,并由 accept() 方法返回。 

    b. 使用所返回的 Socket 实例的 InputStream 和 OutputStream 与客户端进行通信。

    c. 通信完成后,使用 Socket 类的 close() 方法关闭该客户端套接字连接。 

 

客户端代码:

package com.iteye.xuj.socket;

import java.net.Socket;
import java.net.SocketException;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

public class TestClient {

	public static void main(String[] args) throws IOException {
		// 地址、数据、端口
		String server = "127.0.0.1";
		byte[] data = "测试数据".getBytes();
		int servPort = 7;

		// 创建TCP套接字
		Socket socket = new Socket(server, servPort);
		System.out.println("Connected to server...sending echo string");
		// 获取套接字的输入输出流
		InputStream in = socket.getInputStream();
		OutputStream out = socket.getOutputStream();
		// 发送字符串到回馈服务器
		out.write(data);

		// 从回馈服务器接受回馈信息
		int totalBytesRcvd = 0;
		int bytesRcvd;
		while (totalBytesRcvd < data.length) {
			if ((bytesRcvd = in.read(data, totalBytesRcvd, data.length - totalBytesRcvd)) == -1)
				throw new SocketException("Connection closed prematurely");
			totalBytesRcvd += bytesRcvd;
		}

		System.out.println("Received: " + new String(data));
		// 关闭套接字
		socket.close();
	}
}

 

服务器端代码

package com.iteye.xuj.socket;

import java.net.*;
import java.io.*;

public class TestServer {

	private static final int BUFSIZE = 32;

	public static void main(String[] args) throws IOException {
		//端口号
		int servPort = 7;

		//创建服务器端套接字,servSock侦听特定端口号上的客户端连接请求
		ServerSocket servSock = new ServerSocket(servPort);

		int recvMsgSize;
		byte[] receiveBuf = new byte[BUFSIZE];

		//永久循环,迭代处理新的连接请求
		while (true) {
			//接受新的连接请求
			Socket clntSock = servSock.accept();

			//报告已连接的客户端
			SocketAddress clientAddress = clntSock.getRemoteSocketAddress();
			System.out.println("Handling client at " + clientAddress);

			//获取套接字的输入输出流
			InputStream in = clntSock.getInputStream();
			OutputStream out = clntSock.getOutputStream();

			//接收并复制数据,直到客户端关闭
			while ((recvMsgSize = in.read(receiveBuf)) != -1) {
				out.write(receiveBuf, 0, recvMsgSize);
			}
			//关闭客户端套接字
			clntSock.close();
		}
	}
}

 

直接运行客户端输出如下:

Exception in thread "main" java.net.ConnectException: Connection refused: connect
	at java.net.PlainSocketImpl.socketConnect(Native Method)
	at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:351)
	at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:213)
	at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:200)
	at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)
	at java.net.Socket.connect(Socket.java:529)
	at java.net.Socket.connect(Socket.java:478)
	at java.net.Socket.<init>(Socket.java:375)
	at java.net.Socket.<init>(Socket.java:189)
	at com.iteye.xuj.socket.TestClient.main(TestClient.java:18)

 

先运行服务器端,再运行客户端:

服务器端输出如下:

Handling client at /127.0.0.1:24635

 客户端输出如下:

Connected to server...sending echo string
Received: 测试数据

 

 

 

 

 

分享到:
评论

相关推荐

    Socket-TCP-Echo.rar_java tcp socket_tcp server java

    在本示例中,“Socket-TCP-Echo.rar”包含了一个简单的TCP服务器和客户端程序,用于演示如何使用Java进行TCP通信。下面将详细解释相关知识点。 1. **TCP(Transmission Control Protocol)**: TCP是一种面向连接的...

    Java TCP-IP Socket编程-卡尔弗特.pdf

    Java TCP/IP Socket编程是网络通信领域中的核心技术,尤其在Java编程中,Socket是实现客户端与服务器之间通信的基础。本资料“Java TCP-IP Socket编程-卡尔弗特.pdf”旨在深入探讨如何利用Java语言进行TCP/IP套接字...

    JavaTCP-Socket.zip_JAVA socket编程_java socket _socket 聊天

    - 参考`JavaTCP Socket.txt`文件,可能包含了一个简单的聊天应用示例代码,包括服务器端的监听、客户端的连接以及数据传输的实现。 总结,Java Socket编程为开发者提供了构建网络通信应用的基础工具,通过TCP套接...

    Java-network-socket-programming.zip_java programming_java socket

    Java Socket是Java提供的网络通信接口,允许两台机器上的应用程序通过TCP/IP协议进行双向通信。Socket建立在网络连接的基础上,为应用层提供了一个抽象层,简化了网络编程。Java Socket分为ServerSocket和Socket两种...

    Socket-TCP-IP_基于socket实现TCP通信_

    在`Socket-TCP-IP`压缩包中,可能包含了示例代码,展示了如何在C++、Java或Python等语言中实现这些步骤。通过分析和运行这些代码,可以更直观地理解TCP Socket通信的工作原理。 此外,为了调试和优化TCP通信,我们...

    基于Java--Socket-网络编程.doc

    Java Socket 网络编程是Java开发中用于实现客户端与服务器间通信的核心技术。通过Socket,我们可以构建基于TCP/IP协议的应用程序,实现数据的可靠传输。TCP/IP协议是互联网的基础,由网络层的IP协议和传输层的TCP...

    JAVA TCP-IP Socket网络通信编程研究.pdf

    JAVA TCP-IP Socket 网络通信编程研究 JAVA TCP-IP Socket 网络通信编程研究是关于使用 Java 语言实现基于 TCP/IP 协议的网络通信编程的研究。该研究主要关注于使用 Java Socket 实现 TCP/IP 网络程序框架及网络...

    socket-java-demo-good.rar_Follow_ Follow_easy socket

    总的来说,这个"socket-java-demo-good"项目提供了一个简单的Java Socket编程示例,适用于学习和实践TCP通信的基本原理和技巧。通过这个示例,你可以了解到如何创建服务器端和客户端,以及如何通过Socket进行数据...

    java-socket连接nodejs-socket

    在Java中,Socket是`java.net.Socket`类的一个实例,它代表了TCP协议中的一个连接。创建Socket时,你需要指定服务器的IP地址和端口号。以下是一个简单的Java Socket客户端示例: ```java import java.io.*; import ...

    基于java的modbus TCP通信

    在 Java 中,可以使用 Socket 编程来实现 Modbus TCP 通信。首先,需要创建一个 Socket 对象,用于连接到 Modbus 设备。然后,需要根据 Modbus TCP 协议的报文格式编码报文,发送到设备端。设备端将回复响应报文,...

    Java TCP-IP Socket编程(原书第2版)_41467.azw3

    Java TCP-IP Socket编程(原书第2版)_41467.azw3

    TCP-socket.zip_java_java Tcp _java socket _socket_socket多线程

    本压缩包文件"TCP-socket.zip"包含了一个基于Java实现的TCP Socket通信客户端和服务端,且支持多线程并发连接。这个学习资源可以帮助我们深入了解Java中的TCP Socket编程和多线程技术。 首先,让我们来看看TCP协议...

    JAVA-Socket-Programming.rar_Socket Programmi_java programming

    本资料“JAVA-Socket-Programming.rar”包含了一套完整的课件和实例,非常适合Java编程初学者学习。Socket编程允许应用程序通过Internet协议(如TCP/IP)进行通信,创建客户端和服务器端的连接,实现数据的双向传输...

    Java网络编程(socket---网上广播).rar_Java 网络_Socket网络编程_java socket _ja

    在描述中的"socket---网上广播"可能指的是使用多播Socket进行网络通信。 在实现网上广播时,服务器不仅需要监听普通TCP连接,还需要加入一个多播组,通过`MulticastSocket`发送数据到多播组。而客户端则需要创建`...

    Socket-tcpudp.rar_tcpudp

    在这个"Socket-tcpudp.rar"压缩包中,很可能包含了一系列关于如何使用Socket进行TCP和UDP通信的源代码示例。让我们深入探讨一下这两个协议以及Socket编程的基础知识。 TCP(Transmission Control Protocol)是一种...

    java socket client-server

    在压缩包文件`socket-demo`中,可能包含了完整的客户端和服务端示例代码,供学习者参考和实践。这些代码通常会有详细的注释,解释每一步的目的和工作原理。通过运行这些示例,你可以更好地理解Java Socket通信的工作...

    react-native-tcp-socket:使用客户端SSLTLS支持对适用于Android,iOS和macOS的本机TCP套接字API进行React

    TcpSocket createConnection() 服务器listen() 维护者 致谢 执照 入门 使用任一Yarn安装库: yarn add react-native-tcp-socket 或npm: npm install --save react-native-tcp-socket 覆盖net 由于react-...

    mirrors-hp-socket-master.zip_java udp_python udp_socket_socket 高

    HP-Socket 是一套通用的高性能 TCP/UDP/HTTP 通信框架,包含服务端组件、客户端组件和Agent组件,广泛适用于各种不同应用场景的 TCP/UDP/HTTP 通信系统,提供 C/C++、C#、Delphi、E(易语言)、Java、Python 等编程...

Global site tag (gtag.js) - Google Analytics