黑马程序员_12Tcp实例

来源:互联网 发布:淘宝女包店 编辑:程序博客网 时间:2024/06/05 08:11
------- android培训ios培训、期待与您交流! ----------
一、服务端接受客户端的消息
//TcpClient
import java.net.*;
import java.io.*;
public class TcpClient{
 public static void main(String[] args) throws Exception{
  Socket s = new Socket("192.168.1.103",1888);
  Thread.sleep(3000);
  OutputStream os = s.getOutputStream();//无论是getInputStream还是getOutputStream 都是socket的方法而不是ServerSocket的
  DataOutputStream dos = new DataOutputStream(os);
  dos.writeUTF("hello");
  dos.close();
  s.close();
 }
}
//程序在运行过程中出现了一点小差错,一开始用的是8888,结果测试老是出问题,发现只要一启用server 就会有一个client用户连接,始终找不到问题所在,最后更换端口号,测试正常,以后需要注意这么方面的问题。因为本机8888端口很有可能被其他程序已经占用,所以会有这样的提示

//TcpServer
import java.net.*;
import java.io.*;
public class TcpServer{
 public static void main(String[] args) throws Exception{
 ServerSocket ss = new ServerSocket(1888);
  while(true){
   Socket s = ss.accept();
   System.out.println("a client is connected");
   DataInputStream dis = new DataInputStream(s.getInputStream());
   System.out.println(dis.readUTF());
   dis.close();
   s.close();
  }
 }
}

总结:1、编写Tcp代码时需要配合着写,先写服务端,再写客户端 
           2、启动程序时,也需要先启用服务端,在启用客户端
           3、此外,需要灵活配合使用IO操作相关的类


二、Tcp连接实例2:获取客户端连接的Ip以及端口

//服务端程序
import java.net.*;
import java.io.*;
public class TestTcpServer{
 public static void main(String[] args){
  try{
   ServerSocket ss = new ServerSocket(8989);
   Socket s = ss.accept();
   DataInputStream dis = new DataInputStream(s.getInputStream());
   System.out.println("client IP:"+s.getInetAddress()+"client PORT:"+s.getPort());
   System.out.println(dis.readUTF());
   dis.close();
   s.close();
  }catch(Exception e){
   System.out.println("系统错误,请连接管理员");
  }
 }
}

//客户端程序
import java.net.*;
import java.io.*;
public class TestTcpClient{
 public static void main(String[] args){
  try{
   Socket s = new Socket("192.168.1.103",8989);
   DataOutputStream dos = new DataOutputStream(s.getOutputStream());
   dos.writeUTF("Hello Server");
   dos.close();
   s.close();
  }catch(ConnectException ce){
   System.out.println("连接服务器失败");
  }catch(IOException ie){
   System.out.println("数据传输失败");
   ie.printStackTrace();
  }
 }
}
总结:
1、需要注意的问题与实例1一样,另外服务器端可以获得连接到服务端的客户端的Ip和端口
0 0