java 中模拟TCP传输的客户端和服务端实例详解

网友投稿 207 2023-05-28


java 中模拟TCP传输的客户端和服务端实例详解

一、创建TCP传输的客户端

1、建立TCP客户端的Socket服务,使用的是Socket对象,建议该对象一创建就明确目的地,即要连接的主机;

2、如果连接建立成功,说明数据传输通道已建立,该通道就是Socket流,是底层建立好的,既然是流,说着这里既有输入流,又有输出流,想要输入流或者输出流对象,可以通过Socket来获取,可以通过getOutputStream()和getInputStream()来获取;

3、使用输出流,将数据写出;

4、关闭Socket服务。

import java.io.IOException;

import java.io.OutputStream;

import java.net.Socket;

public class Client {

public static void main(String[] args) throws IOException {

// 1、创建客户端的Socket服务

Socket socket = new Socket("192.168.1.100", 10002);

// 2、获取Socket流中输入流

OutputStream out = socket.getOutputStream();

// 3、使用输出流将指定的数据写出去

out.write("TCP is coming !".getBytes());

// 4、关闭Socket服务

socket.close();

}

}

二、创建TCP传输的服务端

1、建立TCP服务端的的Socket服务,通过ServerSocket对象;

2、服务端必须对外提供一个端口,否则客户端无法连接;

3、获取连接过来的客户端对象;

4、通过客户端对象来获取Socket流,读取客户端发来的数据;

5、关闭资源,关客户端,关服务端。

import java.io.IOException;

import java.io.InputStream;

import java.net.ServerSocket;

import java.net.Socket;

public class Server {

public static void main(String[] args) throws IOException {

// 1、创建客户端对象

ServerSocket ss = new ServerSocket(10002);

// 2、获取连接过来的客户端对象

Socket s = ss.accept();

String ip = s.getInetAddress().getHostAddress();

// 3、通过Socket对象获取输入流,读取客户端发来的数据

InputStream in = s.getInputStream();

byte[] buf = new byte[1024];

int len = in.read(buf);

String text = new String(buf, 0, len);

System.out.println(ip + ":" + text);

// 4、关闭资源

s.close();

ss.close();

}

}

三、优化TCP传输的客户端和服务端

在本部分,我们对前两部分的内容进行优化,实现TCP传gkxYQLfB输模式下的客户端和服务端的交互功能。

/**

*优化TCP传输的客户端

*/

import java.io.IOException;

import java.io.InputStream;

import java.io.OutputStream;

import java.net.Socket;

public class ClientUpdate {

public static void main(String[] args) throws IOException {

Socket socket = new Socket("192.168.1.100", 10002);

OutputStream out = socket.getOutputStream();

out.write("tcp!".getBytes());

// 读取服务端返回的数据,使用Socket读取流

InputStream in = socket.getInputStream();

byte[] buf = new byte[1024];

int len = in.read(buf);

String text = new String(buf, 0, len);

System.out.println(text);

socket.close();

}

}

/**

*优化TCP传输的服务端

*/

import java.io.IOException;

import java.io.InputStream;

import java.io.OutputStream;

import java.net.ServerSocket;

import java.net.Socket;

public class ServerUpdate {

public static void main(String[] args) throws IOException {

gkxYQLfB // 1、创建服务端对象

ServerSocket ss = new ServerSocket(10002);

// 2、获取连接过来的客户端对象

Socket s = ss.accept(); //accept方式为阻塞式方法

String ip = s.getInetAddress().getHostAddress();

// 3、通过Socket对象获取输入流,要读取客户端发来的数据

InputStream in = s.getInputStream();

byte[] buf = new byte[1024];

int len = in.read(buf);

String text = new String(buf, 0, len);

System.out.println(ip + ":" + text);

// 使用客户端的Socket对象的输出流给客户端返回数据

OutputStream out = s.getOutputStream();

out.write("收到".getBytes());

s.close();

ss.close();

}

}

四、创建英文大写转换服务器

应用TCP(Transmission Control Protocol,传输控制协议)的相关性质,创建一个基于TCP传输下的英文大写转换服务器,要求:客户端输入字母数据,发送给服务端;服务端收到数据后显示在控制台,并将该数据转成大写字母返回给客户端;直到客户端输入“over”为止,转换结束。

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;

import java.io.PrintWriter;

import java.net.Socket;

public class TransClient {

public static void main(String[] args) throws IOException {

/**

* 思路:创建客户端

* 1、创建Socket客户端对象

* 2、获取键盘录入的数据

* 3、将录入的信息发送给Socket输出流

* 4、读取服务端的数据并返回的大写数据

*/

// 1、创建Socket客户端对象

Socket s = new Socket("192.168.1.100", 10004);

// 2、获取键盘录入

BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));

// 3、Socket输出流

PrintWriter out = new PrintWriter(s.getOutputStream(), true);

// 4、Socket输入流,读取服务端的数据并返回的大写数据

BufferedReader bufIn = new BufferedReader(new InputStreamReader(s.getInputStream()));

String line = null;

while ((line = bufr.readLine()) != null) {

if ("over".equals(line))

break;

out.println(line);

// 读取服务端返回的一行大写数据

String upperStr = bufIn.readLine();

System.out.println(upperStr);

}

s.close();

}

}

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;

import java.io.PrintWriter;

import java.net.ServerSocket;

import java.net.Socket;

public class TransServer {

public static void main(String[] args) throws IOException {

/**

* 思路:创建服务端

* 1、创建SeverSocket客户端对象

* 2、获取Socket流

* 3、通过Socket, 读取客户端发过来的需要转换的数据

* 4、显示在控制台上

* 5、将数据转换成大写返回给客户端

*/

// 1、创建SeverSocket对象

ServerSocket ss = new ServerSocket(10004);

// 2、获取Socket对象

Socket s = ss.accept();

// 获取IP地址

String ip = s.getInetAddress().getHostAddress();

System.out.println(ip + "......connected");

// 3、获取Socket读取流,并装饰

BufferedReader bufIn = new BufferedReader(new InputStreamReader(s.getInputStream()));

// 4、获取Socket的输出流,并装饰

PrintWriter out = new PrintWriter(s.getOutputStream(), true);

String line = null;

while ((line = bufIn.readLine()) != null) {

System.out.println(line);

out.println(line.toUpperCase());

}

s.close();

ss.close();

}

}

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:bootstrap table实现单击单元格可编辑功能
下一篇:Java变量和对象的作用域
相关文章

 发表评论

暂时没有评论,来抢沙发吧~