程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Java Socket編程(四)-2

Java Socket編程(四)-2

編輯:關於JAVA

重復和並發服務器

所有的這些調用都可以擲出一個UnknownHostException違例.如果一台計算機沒有連接上DNS服務器,或者主機的確沒有找到,這個違例就會被擲出.如果一台計算機沒有一個激活的TCP/IP配置,getLocalHost()也為失敗並擲出一個違例.

一旦一個地址被確定了,數據報就可以被送出了.下面的程序傳輸了一個字符串給目的socket:

String toSend = "This is the data to send!");

byte[] sendbuf = new byte[ toSend.length() ];

toSend.getBytes( 0, toSend.length(), sendbuf, 0 );

DatagramPacket sendPacket = new DatagramPacket( sendbuf, sendbuf.length,

addr, port);

clIEntSocket.send( sendPacket );

首先,字符串必須被轉換成一個字節數組.然後,一個新的DatagramPacket實例必須被建立.注意構建器的最後兩個參數.因為要發送一個包,所以地址和端口必須被給定.一個applet可能可以知道它的服務器的地址,但是服務器如何知道它的客戶機的地址呢.當任何一個包被收到後,返回的地址和端口會被解壓出來,並通過getAddress()和getPort()方法得到.這就是一個服務器如何回應一個客戶端的包:

DatagramPacket sendPacket = new DatagramPacket( sendbuf, sendbuf.length,

recvPacket.getAddress(), recvPacket.getPort() );

serverSocket.send( sendPacket );

不像面向連接的操作,數據報服務器服務器其實比數據報客戶端更簡單:

數據報服務器

一個數據報服務器的基本步驟:

1.在一個指定的端口上建立一個數據報socket.

2.用receive方法等待進來的包.

3.用特定的協議來回應收到的包.

4.回到第二步或繼續第二步.

5.關閉數據報socket.

列表9.3演示了一人簡單的數據報回應服務器.它將回應它收到的包.

列表9.3.一個簡單的數據報回應服務器

import Java.io.*;

import Java.Net.*;

public class SimpleDatagramServer

{

public static void main(String[] args)

{

DatagramSocket socket = null;

DatagramPacket recvPacket, sendPacket;

try

{

socket = new DatagramSocket(4545);

while (socket != null)

{

recvPacket= new DatagramPacket(new byte[512], 512);

socket.receive(recvPacket);

sendPacket = new DatagramPacket(

recvPacket.getData(), recvPacket.getLength(),

recvPacket.getAddress(), recvPacket.getPort() );

socket.send( sendPacket );

}

}

catch (SocketException se)

{

System.out.println("Error in SimpleDatagramServer: " + se);

}

catch (IOException ioe)

{

System.out.println("Error in SimpleDatagramServer: " + ioe);

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved