加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

【IT面试题——语言基础类】Java(三)

(2012-06-23 16:48:22)
标签:

it

分类: 技术类原创
22.Java socket编程实例。

分别以UDP和TCP进行示例。

UDP示例
———————————UDP 发送端 —————————————

package socket;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;

class UdpSend {
    public static void main(String[] argsthrows IOException{
        DatagramSocket ds = new DatagramSocket();
        String stringToSend = "test message!";
        DatagramPacket packet = new DatagramPacket(stringToSend.getBytes(),stringToSend.length(),InetAddress.getByName("219.245.79.179"),5000);
        ds.send(packet);
        ds.close();
    }
}


—————————— UDP 接收端 —————————————
package socket;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;

public class UdpRcv {
    public static void main(String[] s) throws IOException{
        DatagramSocket ds = new DatagramSocket(5000);
        byte[] buf = new byte[1024];
        DatagramPacket packet = new DatagramPacket(buf,buf.length);
        ds.receive(packet);
        String str = new String(packet.getData(),0,packet.getLength());
        System.out.println(str);
        ds.close();
    }
}

总结:

UDP发送:
1.建立发送UDP套接字 
DatagramSocket ds = new DatagramSocket();
2.创建UDP数据包(包含了目的地址信息)
DatagramPacket packet = new 
  DatagramPacket(byte[] buf, int length, InetAddress address, int port);
3.利用UDP套接字发送
        ds.send(packet);

UDP接收:
1.建立接收UDP套接字
DatagramSocket ds = new DatagramSocket(5000);
2.创建接收数据用的UDP数据包对象
  byte[] buf = new byte[1024];
        DatagramPacket packet = new DatagramPacket(buf,buf.length);
 3.接收数据包
  ds.receive(packet);
 
 需要注意的地方:发送中文时,一个字占两个字节,所以发送方的stringToSend.length()应该改为
stringToSend.getBytes().length


TCP示例

—————————— TCP 服务器端 —————————————
package socket;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;

public class TcpServer {
    public static void main(String[] s) throws IOException{
        ServerSocket server = new ServerSocket(5001);
        Socket client = server.accept();
        InputStreamReader inStreamReader = new InputStreamReader(client.getInputStream()); 
        BufferedReader in = new BufferedReader(inStreamReader);
        PrintWriter out = new PrintWriter(client.getOutputStream(),true);
        
        while(true){    
            String str = in.readLine();    
            if(str.equalsIgnoreCase("end")){
                 break;
            }
            out.println("keep on talking - - ...");    
        }
        client.close();
        server.close();
    }
}

—————————— TCP 客户端 —————————————
package socket;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;

public class TcpClient {
    public static void main(String[] s) throws UnknownHostException, IOException{
        Socket client = new Socket(InetAddress.getLocalHost(),5001);
        InputStreamReader isStreamReader = new InputStreamReader(client.getInputStream());
        BufferedReader in = new BufferedReader(isStreamReader);
        PrintWriter out = new PrintWriter(client.getOutputStream());
        BufferedReader input = new BufferedReader(new InputStreamReader(System.in));
        
        while(true){
            String str = input.readLine();
            out.println(str);
            out.flush();
            if (str.equalsIgnoreCase("end")) {
                break;
            }
            System.out.println(in.readLine());
        }
        client.close();
    }
}

总结:
TCP发送
1.建立TCP Socket对象
Socket client = new Socket(InetAddress.getLocalHost(),5001);
2.从对象获得输入输出流
client.getOutputStream();
client.getInputStream();
3.利用输入数出流进行通信
InputStream -> InputStreamReader -> BufferedReader
OutputStream -> PrintWriter


TCP接收
1.建立TCP socket服务端对象
ServerSocket server = new ServerSocket(5001);
2.阻塞等待,获得套接字
Socket client = server.accept();
3.从套接字获得输入输出流
client.getOutputStream();
client.getInputStream();
4.利用输入输出流进行操作(同上)

实际应用中socket服务器端应该用多线程实现,每接收一个socket就启动一个线程进行处理即可。

23.Java NIO ,AIO是什么?

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有