JAVA TCP/IP Socket实例

客户端代码

public class TCPEchoClient {
 public static void main(String [] args) throws UnknownHostException, IOException, InterruptedException {
  if(args.length<2||args.length>3){
   throw new IllegalArgumentException("Parameter(s):<Server> <Word> [<Port>]");
  }
  
  String server=args[0];
  
  byte [] data=args[1].getBytes();
  
  int servPort=(args.length==3)?Integer.parseInt(args[2]):7;
  
  //1.创建一个Socket实例:构造函数向指定的远程主机和端口建立一个TCP连接
  Socket socket=new Socket(server,servPort);
  System.out.println("Connected to server... sending echo string");
  
  /**
   *2. 通过套接字的输入输出流进行通信:一个Socket连接实例包括一个InputStream和一个OutputStream,它们的用法同于其他Java输入输出流。
   */
  InputStream in=socket.getInputStream();
  OutputStream out=socket.getOutputStream();
  
  out.write(data);
  
  int totalBytesRcvd=0;
  int bytesRcvd;
  
  while(totalBytesRcvd<data.length){
   if((bytesRcvd=in.read(data, totalBytesRcvd, data.length-totalBytesRcvd))==-1){
    throw new SocketException("Connection closed prematurely");
   }
   totalBytesRcvd+=bytesRcvd;
  }
  System.out.println("Receved: "+new String(data));
  
  //3.使用Socet类的close()方法关闭连接
  socket.close();
 }
}

 

 

 

服务端代码

public class TCPEchoServer {
 private static final int BUFSIZE=32;
 
 public static void main(String [] args) throws IOException, InterruptedException{
  if(args.length!=1){
   throw new IllegalArgumentException("Parameter(s):<Port>");
  }
  
  int servPort=Integer.parseInt(args[0]);
  
  //1.创建一个ServerSocket实例并制定本地端口。此套接字的功能是侦听该制定端口收到的连接。
  ServerSocket servSock=new ServerSocket(servPort);
  
  int recvMsgSize;
  
  byte [] receiveBuf=new byte[BUFSIZE];
  
  //2.重复执行
  while(true){
   //a.调用ServerSocket的accept()方法以获取下一个客户端连接。
   //基于新建立的客户端连接,创建一个Socket实例,并由accept()方法返回
   Socket clntSock=servSock.accept();
   SocketAddress clientAddress=clntSock.getRemoteSocketAddress();
   System.out.println("Handling client at "+clientAddress);
   
   //b,使用所返回的Socket实例的InputStream和OutputStream与客户端进行通信
   InputStream in=clntSock.getInputStream();
   OutputStream out=clntSock.getOutputStream();

   while((recvMsgSize=in.read(receiveBuf))!=-1){
    out.write(receiveBuf, 0, recvMsgSize);
   }
  
   //c,通信完成后,使用Socket的close()方法关闭该客户端套接字链接
   clntSock.close();
  }
 }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值