网络通信(二)TCP程序设计(Java)

TCP网络程序设计是利用Socket类进行编写的通信程序,利用TCP协议进行通信的两个应用程序是有主次之分,一个为服务器程序,一个为客户机程序,步骤如下:

① 服务器创建一个服务端套接字(ServerSocket),使用accept()方法等待客户机连接

② 客户端创建一个Socket,请求与服务器建立连接

③ 服务端接收到了客户机的请求,同时创建一个Socket与客户机连接。

服务端套接字:在Java中ServerSocket类表示服务器套接字,主要功能是等待网络上的请求,通过指定的端口实例ServerSocket类,它将会通过指定的端口来等待连接的套接字,服务器套接字依次可以与一个套接字连接,若多台客户机同时提出连接请求,服务器套接字会将请求连接的客户机存入队列中(先进先出),然后从中一个个取出与服务器套接字进行连接,当然请求连接数也是有上限的,队列默认大小是50,若请求连接数超出最大容纳数,则多出的连接请求将会被拒绝。

通信实现:当客户机的socket与服务器的socket相连接后,客户机调用socket的getOutputStream()获取的输出流将指向服务器调用socket的getInputStream()方法的输入流反之亦然。

代码实现(单向通信)(java):

服务器端:
① 声明字段

 private BufferedReader reader; //用于读取流(客户机传递的数据)
 private ServerSocket server; //服务器套接字
  private Socket socket; //套接字

② 服务器通过端口8080(自定义)创建服务器套接字,调用accept()方法等待客户机请求

 void getserver(){
  try {
   server = new ServerSocket(8080); //实例化ServerSocket对象
   System.out.println("套接字创建成功");
   while (true) {
    System.out.println("等待客户机连接");
    socket = server.accept(); //客户机请求,服务端创建套接字与其连接获取socket对象
    System.out.println("连接完成");
    getClientMsg(); 
  }
  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
 }

③服务器得到客户机的请求,进行连接获取到socket对象,获取客户机数据转化为输入流,在将其转化为输出流,打印出来,并且关闭相应的流和套接字。

private void getClientMsg() {
  try {
   //打印 客户端数据
   System.out.println("客户机"  + reader.readLine());
  } catch (Exception e) {
   // TODO: handle exception
  } finally {
   try {
    if (reader != null) {
     reader.close();
    }
    if (socket != null) {
     socket.close();
    }
   } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }
  }
 }

④启动调用

public static void main(String[] args) {
  FWQ fwq = new FWQ();
  fwq.getserver();
 }

客户机:

①声明字段

 private static Socket socket; //客户机套接字
 private static PrintWriter writer; //用于客户机写入数据传输到服务器

②创建套接字,传入IP与端口进行请求连接得到套接字,向套接字写入数据

 public static void main(String[] args) {
  try {
   System.out.println("尝试连接");
   socket = new Socket("127.0.0.1",8080);
   System.out.println("完成连接");
   writer = new PrintWriter(socket.getOutputStream(),true);
   writer.println("aaa");
  } catch (UnknownHostException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
 }

输出:
服务器:
在这里插入图片描述
客户机:
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值