您所在的位置:主页 > JAVA技术 >

Java网络编程

时间:2014-08-27 17:59来源:未知 作者:疯狂java 点击:

    很多人把网站编程等价于网络编程,在这里给大家纠正一下,网络编程!=网站编程,那么何为网络编程呢?网络编程时基于TCP和UDP的一种编程,例如:游戏类、社交类产品。对于TCP通讯,它是一种有问有答的一种编程,而UDP是一种类似于对讲机的一种通讯,两者各有优点,TCP相对UDP更安全,UDP相对TCP传输更快速,在游戏开发中经常使用UDP通讯。

  对于他们之间的深层区别,我就不是十分清楚了,如果你知道,请劳烦交流一下。下面我们以实际例子,简单介绍一下网络编程:

  一、基于TCP的简单网络连接:

  服务器端代码:

  public class TestSeriver {

  /**服务器端

  * @param args

  */

  public static void main(String[] args) {

  try {

  //我们的机器上一个有65526个端口,在我们设置端口时,尽量选择124以后的端口,因为124之前的端口已经被特定的程序设置,例如:80 :浏览器地址端口

  ServerSocket ss = new ServerSocket(888);//这里的888:是我们为了方便客户端的连接设置的端口号

  Socket s = ss.accept();//用来接收客户端的的连接,注意这个方法是阻塞式的,也就是说如果没有客户端连接,程序将会停留在这个位置

  System.out.println("A client connect!");

  } catch (IOException e) {

  e.printStackTrace();

  }

  }

  }

  客户端代码:

  public class TestClient {

  /**客户端

  * @param args

  */

  public static void main(String[] args) {

  try {

  Socket s = new Socket("127.0.0.1",888);//在这里说明一点,"127.0.0.1":使我们的主机号,888:是我们需要连接的端口号

  } catch (UnknownHostException e) {

  e.printStackTrace();

  } catch (IOException e) {

  e.printStackTrace();

  }

  }

  }

  在这里说明一点,这种服务器--客户端连接,一次只能连接一个客户端,并且没有任何数据通信,那如何实现多客户端连接,并完成通信呢?接下来就给大家介绍一种方式:

  服务器端代码:

  public class TestSeriver1 {

  /**服务器端

  * @param args

  */

  public static void main(String[] args) {

  try {

  ServerSocket ss = new ServerSocket(999);

  while(true){

  Socket s = ss.accept();

  System.out.println("A client connect!");

  InputStream is = s.getInputStream();

  DataInputStream dis = new DataInputStream(is);

  System.out.println(dis.readUTF());//这里的readUTF()方法也是阻塞式的,为了让看到这个效果我在客户端输入的地方添加了一个停顿,已经标注

  }

  } catch (IOException e) {

  e.printStackTrace();

  }

  }

  }

  客户端代码:

  public class TestClient1 {

  /**客户端

  * @param args

  */

  public static void main(String[] args) {

  try {

  Socket s = new Socket("127.0.0.1", 999);

  OutputStream os = s.getOutputStream();

  DataOutputStream dos = new DataOutputStream(os);

  Thread.sleep(3000);//设置停顿三秒钟,关于这个我在线程的博客里有说明

  dos.writeUTF("Hello Server!");

  } catch (UnknownHostException e) {

  e.printStackTrace();

  } catch (IOException e) {

  e.printStackTrace();

  }catch (InterruptedException e) {

  // TODO Auto-generated catch block

  e.printStackTrace();

  }

  }

  }