`

第2章:基本套接字之TCP套接字

阅读更多

TCP客户端

 

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

public class TCPEchoClient {

	/**
	 * @param args
	 * @throws IOException 
	 * @throws UnknownHostException 
	 */
	public static void main(String[] args) throws UnknownHostException, IOException {
		if (args.length < 2 || args.length > 3)
			throw new IllegalArgumentException("Parameters:<Server> <Word> [<Port>]");

		String server = args[0];	//server name or ip address
		//Conver aaargument String to bytes using default character encoding
		byte[] data = args[1].getBytes();
		
		int servPort = (args.length == 3) ? Integer.parseInt(args[2]) : 7;
		
		//Create socket that is connected to server on special port
		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);    //send the encoded string to the server
		
		//receive the same string back from the server
		int totalByteRcvd = 0;   //total bytes received so far
		int bytesRcvd;			 //bytes received in last read
		while (totalByteRcvd < data.length) {
			if((bytesRcvd = in.read(data,totalByteRcvd,
							data.length-totalByteRcvd)) == -1)
			throw new SocketException("connection closed prematurely");
			totalByteRcvd += bytesRcvd;
		}  //data array is full
		
		System.out.println("Received:" + new String(data));
		
		socket.close();
	}

}
 

 

TCP服务器端

 

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

import java.net.ServerSocket;
import java.net.Socket;
import java.net.SocketAddress;

public class TCPEchoServer {

	private static final int BUFSIZE =32;    //Size of reveive buffer
	/**
	 * @param args
	 * @throws IOException 
	 */
	public static void main(String[] args) throws IOException {
		if(args.length != 1)
			throw new IllegalArgumentException("Parameter: <Port>");
		
		int servPort = Integer.parseInt(args[0]);
		
		//create a server socket to accept client connection requests
		ServerSocket servSocke = new ServerSocket(servPort);
		
		int recvMsgSize;    //size of receive message
		byte[] receiveBuf = new byte[BUFSIZE];    //receive buffer
		
		while (true) {  //run forever,accepting and servicing connections
			Socket clntSock = servSocke.accept();    //get client connection
			SocketAddress clientAddress = clntSock.getRemoteSocketAddress();
			System.out.println("Handling client at " + clientAddress);
			
			InputStream in = clntSock.getInputStream();
			OutputStream out = clntSock.getOutputStream();
			
			//receive until client closes connection,indicated by -1 return
			while ((recvMsgSize = in.read(receiveBuf)) != -1) {
				out.write(receiveBuf,0,recvMsgSize);
			}
			clntSock.close();    //close the socket,we are done with this client!
		}
	}

}
 

 

注意:

 

1/TCP终端必须和特定的端口号关联,这样客户端才能够向该端口号发送链接请求

2/端口号第有效范围所0~65535(如果端口号被设为0,将选择任意没有使用第端口号)

 

测试方法:(需要打开2个控制台)

在控制台启动服务器端:输入   java TCPEchoServer 8000(也可以所范围内第任意端口)

在控制台启动客户端:   输入    java TCPEchoClient localhost “hello” 8000 (我这里向本地发送tcp请求)

 

我第输出所这样的——

服务器端输出:Handling client at /127.0.0.1:43389

客户端输出:Connected to server ... sending echo stringReceived:hello

成功了。

 

其实可以修改程序固定好服务器,端口号,内容等参数的,这样就不用在控制台里面输入那么多东西了,直接运行服务器端和客户端就行了,很简单的,这里不多说了,有兴趣第朋友可以改好了,发上来交流一下

 

 

 

 

 

 

 

 

 

 

 

 

分享到:
评论

相关推荐

    unix网络编程卷1:套接字联网api(第3版)

    2. **套接字API**:书中深入讲解了套接字API的各种函数,如socket()用于创建套接字,bind()将套接字与特定地址绑定,listen()使服务器进入监听状态,connect()和accept()分别用于客户端连接和服务器接受连接,send()...

    UNIX网络编程 卷1:套接字联网API

    第4章 基本TCP套接字编程 第5章 TCP客户/服务器程序示例 第6章 I/O复用:select和poll函数 第7章 套接字选项 第8章 基本UDP套接字编程 第9章 基本SCTP套接字编程 第10章 SCTP客户/服务器程序例子 第11...

    UNIX网络编程卷1:套接字联网API(第3版)part1 共2部分

    第4章 基本TCP套接字编程 第5章 TCP客户/服务器程序示例 第6章 IO复用:select和poll函数 第7章 套接字选项 第8章 基本UDP套接字编程 第9章 基本SCTP套接字编程 第10章 SCTP客户/服务器程序例子 第11章 名字...

    服务器-第二章:套接字编程.ppt

    套接字是网络通信的基本单元,它允许程序通过网络与其他程序进行数据交换。在TCP/IP协议栈中,套接字是实现进程间通信(IPC)的重要工具。 首先,我们要了解套接字的通用端点地址结构。套接字具备协议族无关性,...

    UNIX网络编程 第1卷(第3版):套接字联网API + 代码 中文 PDF

    《UNIX网络编程 第1卷(第3版):套接字联网API》是网络编程领域的一本经典之作,由W. Richard Stevens撰写。这本书详细介绍了如何在UNIX系统中使用套接字API进行网络通信,是学习和理解网络编程的基础。 本书主要...

    tcp套接字编程,不含界面

    本教程将深入探讨TCP套接字的基本概念、工作原理以及如何在客户端和服务器端进行编程。 TCP协议是Internet协议栈中的一个关键组成部分,它是面向连接的,提供全双工通信,并确保数据的顺序传输和错误校验。TCP协议...

    UNIX网络编程卷1:套接字联网API(第3版)程序

    通过学习这些程序,你可以深入理解网络编程的基本原理,包括TCP连接的建立和关闭、套接字选项的设置、信号处理、套接字的非阻塞I/O和异步I/O模型等。此外,对于网络编程的进阶话题,如HTTP服务器的实现、DNS查询、多...

    流式套接字实现简单的客户端服务端通信过程

    1. **TCP套接字基础** - TCP是一种传输层协议,位于OSI模型的第四层,与UDP(用户数据报协议)并存。 - TCP提供面向连接的服务,即在数据传输前,双方会建立一个可靠的连接。 - 三次握手是TCP连接建立的过程,...

    套接字通信socket

    2. 第二个参数是套接字类型,如SOCK_STREAM表示流式套接字,SOCK_DGRAM表示数据报套接字。 3. 第三个参数是协议,通常是0,意味着让系统选择合适的协议,如TCP或UDP。 描述中提到的"学习与使用.socket(int, int, ...

    VC之 套接字和CSocket类.rar

    压缩包中的"第19章 套接字和CSocket类"很可能包含详细代码示例,讲解了如何使用这些步骤来构建FTP客户端。通过学习这个例子,开发者可以更好地理解如何在实际项目中运用套接字和CSocket类,实现跨平台的网络通信功能...

    UNIX网络编程_卷1_套接字联网API第3版源代码

    《UNIX网络编程_卷1_套接字联网API第3版源代码》是网络编程领域的一本经典之作,由著名计算机科学家W. Richard Stevens撰写。这本书深入浅出地讲解了如何在UNIX系统中使用套接字(Sockets)进行网络通信,涵盖了从...

    套接字服务器程序

    1. **创建套接字**:使用`socket()`函数创建一个新的套接字,指定协议类型(如TCP或UDP)、地址族(通常为AF_INET)和套接字类型(如SOCK_STREAM或SOCK_DGRAM)。 2. **绑定地址**:使用`bind()`函数将套接字与本地...

    TCP.rar_tcp_套接字通信

    首先,TCP套接字通信基于OSI模型或TCP/IP模型的第四层——传输层,它提供了一种端到端的数据通信服务,确保数据的有序、无损传输。TCP通过建立连接、数据分片与重组、确认应答和重传机制来保障数据的可靠性。 1. **...

    信息安全实践第十一次作业 原始套接字

    实验【信息安全实践】的第十一次作业要求学生利用原始套接字来实现TCP SYS flooding攻击,这是一种拒绝服务(DoS)攻击,通过发送大量TCP连接请求,使目标服务器资源耗尽,从而无法处理正常的网络流量。 实验环境...

    流式套接字编程实验

    实验中,你将深入理解TCP套接字的创建、连接、读写操作,以及异常处理。此外,还会涉及到多线程或异步I/O的概念,以处理多个并发客户端连接。这不仅有助于提高编程技能,还有助于理解网络通信的基本原理。 为了完成...

    Windows Socket 套接字编程原理

    Windows Socket 套接字编程原理 ...这篇文章详细介绍了 Windows Socket 套接字编程原理,包括客户机/服务器模式、套接字类型、套接字开发所需要的文件、数据类型的基本定义、网络地址的数据结构和套接字地址结构等。

    UNIX网络编程 卷1:套接字联网API 第三版

    还涉及TCP套接字的选项设置,如`SO_REUSEADDR`、`TCP_NODELAY`等。 7. **UDP编程**:相对TCP,UDP是一种无连接的服务,提供了简单高效的数据传输方式。书中讲解了UDP的特点和使用场景,以及如何处理UDP的数据包。 ...

    在C的TCP客户端和服务器套接字的实现

    在C语言中,我们通常通过标准的Socket API来创建和操作TCP套接字。 **服务器端实现** 服务器端的主要任务是监听特定端口,等待客户端的连接请求。以下是一些关键步骤: 1. **创建套接字**:调用`socket()`函数...

Global site tag (gtag.js) - Google Analytics