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
成功了。
其实可以修改程序固定好服务器,端口号,内容等参数的,这样就不用在控制台里面输入那么多东西了,直接运行服务器端和客户端就行了,很简单的,这里不多说了,有兴趣第朋友可以改好了,发上来交流一下
分享到:
相关推荐
2. **套接字API**:书中深入讲解了套接字API的各种函数,如socket()用于创建套接字,bind()将套接字与特定地址绑定,listen()使服务器进入监听状态,connect()和accept()分别用于客户端连接和服务器接受连接,send()...
第4章 基本TCP套接字编程 第5章 TCP客户/服务器程序示例 第6章 I/O复用:select和poll函数 第7章 套接字选项 第8章 基本UDP套接字编程 第9章 基本SCTP套接字编程 第10章 SCTP客户/服务器程序例子 第11...
第4章 基本TCP套接字编程 第5章 TCP客户/服务器程序示例 第6章 IO复用:select和poll函数 第7章 套接字选项 第8章 基本UDP套接字编程 第9章 基本SCTP套接字编程 第10章 SCTP客户/服务器程序例子 第11章 名字...
套接字是网络通信的基本单元,它允许程序通过网络与其他程序进行数据交换。在TCP/IP协议栈中,套接字是实现进程间通信(IPC)的重要工具。 首先,我们要了解套接字的通用端点地址结构。套接字具备协议族无关性,...
《UNIX网络编程 第1卷(第3版):套接字联网API》是网络编程领域的一本经典之作,由W. Richard Stevens撰写。这本书详细介绍了如何在UNIX系统中使用套接字API进行网络通信,是学习和理解网络编程的基础。 本书主要...
本教程将深入探讨TCP套接字的基本概念、工作原理以及如何在客户端和服务器端进行编程。 TCP协议是Internet协议栈中的一个关键组成部分,它是面向连接的,提供全双工通信,并确保数据的顺序传输和错误校验。TCP协议...
通过学习这些程序,你可以深入理解网络编程的基本原理,包括TCP连接的建立和关闭、套接字选项的设置、信号处理、套接字的非阻塞I/O和异步I/O模型等。此外,对于网络编程的进阶话题,如HTTP服务器的实现、DNS查询、多...
1. **TCP套接字基础** - TCP是一种传输层协议,位于OSI模型的第四层,与UDP(用户数据报协议)并存。 - TCP提供面向连接的服务,即在数据传输前,双方会建立一个可靠的连接。 - 三次握手是TCP连接建立的过程,...
2. 第二个参数是套接字类型,如SOCK_STREAM表示流式套接字,SOCK_DGRAM表示数据报套接字。 3. 第三个参数是协议,通常是0,意味着让系统选择合适的协议,如TCP或UDP。 描述中提到的"学习与使用.socket(int, int, ...
压缩包中的"第19章 套接字和CSocket类"很可能包含详细代码示例,讲解了如何使用这些步骤来构建FTP客户端。通过学习这个例子,开发者可以更好地理解如何在实际项目中运用套接字和CSocket类,实现跨平台的网络通信功能...
《UNIX网络编程_卷1_套接字联网API第3版源代码》是网络编程领域的一本经典之作,由著名计算机科学家W. Richard Stevens撰写。这本书深入浅出地讲解了如何在UNIX系统中使用套接字(Sockets)进行网络通信,涵盖了从...
1. **创建套接字**:使用`socket()`函数创建一个新的套接字,指定协议类型(如TCP或UDP)、地址族(通常为AF_INET)和套接字类型(如SOCK_STREAM或SOCK_DGRAM)。 2. **绑定地址**:使用`bind()`函数将套接字与本地...
首先,TCP套接字通信基于OSI模型或TCP/IP模型的第四层——传输层,它提供了一种端到端的数据通信服务,确保数据的有序、无损传输。TCP通过建立连接、数据分片与重组、确认应答和重传机制来保障数据的可靠性。 1. **...
实验【信息安全实践】的第十一次作业要求学生利用原始套接字来实现TCP SYS flooding攻击,这是一种拒绝服务(DoS)攻击,通过发送大量TCP连接请求,使目标服务器资源耗尽,从而无法处理正常的网络流量。 实验环境...
实验中,你将深入理解TCP套接字的创建、连接、读写操作,以及异常处理。此外,还会涉及到多线程或异步I/O的概念,以处理多个并发客户端连接。这不仅有助于提高编程技能,还有助于理解网络通信的基本原理。 为了完成...
Windows Socket 套接字编程原理 ...这篇文章详细介绍了 Windows Socket 套接字编程原理,包括客户机/服务器模式、套接字类型、套接字开发所需要的文件、数据类型的基本定义、网络地址的数据结构和套接字地址结构等。
还涉及TCP套接字的选项设置,如`SO_REUSEADDR`、`TCP_NODELAY`等。 7. **UDP编程**:相对TCP,UDP是一种无连接的服务,提供了简单高效的数据传输方式。书中讲解了UDP的特点和使用场景,以及如何处理UDP的数据包。 ...
在C语言中,我们通常通过标准的Socket API来创建和操作TCP套接字。 **服务器端实现** 服务器端的主要任务是监听特定端口,等待客户端的连接请求。以下是一些关键步骤: 1. **创建套接字**:调用`socket()`函数...