TCP协议:全称为传输控制协议(即对数据的传输进行一定的控制)。是一种需要建立连接的协议,同时也要基于输入输出流来传输数据。
在实现程序前要明白什么是IP? 什么是端口?
IP
在互联网中,一个IP地址作为唯一标识一个网络接口。是一段网络编码(二进制),32位数。一台连入互联网的计算机肯定有一个IP地址。也可能有多个。
端口
在网络技术中,端口(Port)大致有两种意思:一是物理意义上的端口,比如,集线器、交换机、路由器用于连接其他网络设备的接口等等。二是逻辑意义上的端口,一般是指TCP/IP协议中的端口,端口号的范围从0到65535,比如用于浏览网页服务的80端口等等。
明白了TCP协议的大致de应用,下面来进行程序的实现。
程序实现:先创建两个不同的类:一个为服务器端,一个为客户端
服务器
我们知道TCP传输数据时需要建立而这之间的连接。这里就需要运用到,Socket,Socket是一个抽象概念,一个应用程序通过一个Socket来建立远程连接,Socket内部在通过tcp/ip协议将数据传输到指定位置。而在服务器就需要对指定端口进行监听,来看是否有信息接入,serversocket就是对此功能的实现.
ServerSocket mainsocket = new ServerSocket(8848);如果接通成功,我们就会使用一个无限循环来处理客户端的连接,accept方法表示每有客户端接入,就返回一个socket实例于接入的客户端通信,如果没有客户端接入就会一直进入等待状态.
while (true) {
Socket clint = mainsocket.accept();
InetAddress name = clint.getInetAddress();
System.out.println("客户端"+name.getHostAddress()+"开始接受>>>>");
//接受来自客户端的消息>>>
}
}客户端:
相比于服务器客户端的程序要简单许多,同样的需要用socket建立连接,
Socket clint = new Socket("192.168.254.168",8848);数据的传输:
无论是服务器,客户端都是要依赖于输入输出流进行数据的传输,所以在写入数据时要调用flush()方法.
// 用于读取网络数据:
InputStream in = sock.getInputStream();
// 用于写入网络数据:
OutputStream out = sock.getOutputStream();下面来看完整的代码实现:
服务器:
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;
public class damao1 {
public static void main(String[] args) throws IOException {
//
Scanner input = new Scanner(System.in);
try(ServerSocket mains = new ServerSocket(8848);) {
while (true) {
//客户连接
Socket clint = mains.accept();
try(BufferedReader reader = new BufferedReader(new InputStreamReader(clint.getInputStream()));
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(clint.getOutputStream()))){
//获取客户端的消息
String gets = reader.readLine();
if (!gets.equals(null)) {
System.out.println("来自客户端消息:"+gets);
}
//发送数据到客户端
String out = input.nextLine();
writer.write(out);
}
}
}catch (Exception e) {
}
}
}
客户端:
import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.Socket;
import java.util.Scanner;
public class damao {
public static void main(String[] args) {
//
Scanner input = new Scanner(System.in);
while(true) {
//创建socket对象连接服务器
try (Socket clint = new Socket("192.168.43.71",8848);
BufferedWriter write = new BufferedWriter(new OutputStreamWriter(clint.getOutputStream()));
BufferedReader reader = new BufferedReader(new InputStreamReader(clint.getInputStream()))){
//获取控制台输入的问题
System.out.print("客户端要发送的消息:");
String question = input.nextLine();
//发送消息到服务器
write.write(question);
write.flush();
//输出暂停
clint.shutdownOutput();
//获取服务器消息
String answer = reader.readLine();
System.out.println("服务器的回答:"+answer);
} catch (Exception e) {
}
}
}
}
接下来我们看下运行效果

到此,程序完美运行.
版权声明:本文为m0_66944273原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。