java tcp server例子_java 通过socket实现TCP编程的例子

1.服务端

ServerThread类

/**

* 该类为多线程类,用于服务端

*/

public class ServerThread implements Runnable {

private Socket client = null;

public ServerThread(Socket client) {

this.client = client;

}

public void run() {

try {

//获取Socket的输出流,用来向客户端发送数据

char[] b = new char[400];

PrintStream out = new PrintStream(client.getOutputStream());

//获取Socket的输入流,用来接收从客户端发送过来的数据

BufferedReader buf = new BufferedReader(new InputStreamReader(client.getInputStream()));

boolean flag = true;

while (flag) {

//接收从客户端发送过来的数据

Integer len = buf.read(b);

String str = new String(b, 0, len);

System.out.println(str);

if (str == null || "".equals(str)) {

flag = false;

} else {

if ("bye".equals(str)) {

flag = false;

} else {

//将接收到的字符串前面加上echo,发送到对应的客户端

out.println("echo:" + str);

}

}

}

out.close();

client.close();

} catch (Exception e) {

e.printStackTrace();

}

}

}

启动类

public class Main {

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

//服务端在12345端口监听客户端请求的TCP连接

ServerSocket server = new ServerSocket(12345);

Socket client = null;

boolean f = true;

while (f) {

//等待客户端的连接,如果没有获取连接

client = server.accept();

System.out.println("与客户端连接成功!");

//为每个客户端连接开启一个线程

new Thread(new ServerThread(client)).start();

}

server.close();

}

}

2.测试服务端程序

启动服务端程序

打开调试助手,配置好IP和端口号,连接如下图

9a0cb563b931?from=singlemessage

调试助手.jpg

9a0cb563b931?from=singlemessage

服务端.jpg

然后通过调试助手向服务端发送1234

9a0cb563b931?from=singlemessage

测试.jpg

服务端程序接收到信息1234,并返回“echo”+1234给客户端网络调试助手,成功!

客户端发送bye可结束通信连接。

3.编写Java客户端程序

public class Client1 {

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

//客户端请求与本机在12345端口建立TCP连接

Socket client = new Socket("127.0.0.1", 12345);

client.setSoTimeout(20000);

//获取键盘输入

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

//获取Socket的输出流,用来发送数据到服务端

PrintStream out = new PrintStream(client.getOutputStream());

//获取Socket的输入流,用来接收从服务端发送过来的数据

BufferedReader buf = new BufferedReader(new InputStreamReader(client.getInputStream()));

boolean flag = true;

while(flag){

System.out.print("输入信息:");

String str = input.readLine();

//发送数据到服务端

out.println(str);

if("bye".equals(str)){

flag = false;

}else{

try{

//从服务器端接收数据有个时间限制(系统自设,也可以自己设置),超过了这个时间,便会抛出该异常

String echo = buf.readLine();

System.out.println(echo);

}catch(SocketTimeoutException e){

System.out.println("Time out, No response");

}

}

}

input.close();

if(client != null){

//如果构造函数建立起了连接,则关闭套接字,如果没有建立起连接,自然不用关闭

client.close(); //只关闭socket,其关联的输入输出流也会被关闭

}

}

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值