【JAVA与C#比较】网络编程

1.java中使用InetAddress类来表示IP地址,在C#中用IPAddress表示。两者都可以通过IP地址字符串和网址获取IP地址实例,但实现方式略有不同,具体如下
InetAddress local = InetAddress.getByAddress(new byte[]{127.0.0.1});
InetAddress ip = InetAddress.getByName("www.crazyit.com");//通过网址获取
IPAddress local = IPAddress.Parse("127.0.0.1");
IPHostEntry host = Dns.GetHostByName("www.crazyit.com");//网址获取需Dns类
IPAddress ip = host.AddressList[0];

2.C#中Dns类与IPAdress类和IPHostEntry类不同之处在于,Dns类可以与服务器通信,以获取有关信息。


3.java中使用URLConnection/HttpURLConnection对象向Web站点发送GET、POST请求,并取得响应。而C#中使用HttpClient类实现异步调用Web服务,或者采用WebRequest类请求异步页面的方式。


4.java中使用ServerSocket代表服务器端监听对象,连接成功后产生对应Socket对象。C#中使用TcpListener监听TCP连接,连接成功后产生对应TcpClient对象。需要补充的是,C#中的Socket类用于管理连接,WebRequest、TcpClient和UdpClient等类在内部都是使用的这个类。
ServerSocket ss = new ServerSocket(3000);
while(true){
    Socket s = ss.accept();
}
TcpListener tcpLis = new TcpListener(local,port);
tcpLis.Start();
TcpClient client = tcpLis.AcceptTcpClient();

5.java中ServerSockrtChannel可以用来实现非阻塞通信,以及其对应的异步非阻塞通信AsynchornousServerSockrtChannel类。


6.处理UDP通信时,java中使用DatagramSocket类来进行处理,并且在发送和接受套接字前,需要将消息封装到DatagramPacket包实例类中。而在C#中是将套接字设置为UDP类型,发送和接受依然可以直接通过字节数组来处理。

DatagramSocket socket = new DatagramSocket(8888);
byte[] buf = new byte[256];
DatagramPacket packet = new DatagramPacket(buf, buf.length);  //创建接受数据DatagramPacket对象
socket.receive(packet);
DatagramPacket packet = new DatagramPacket(buf, length, adress, port);  //创建发送数据DatagramPacket对象
socket.send(packet);
//直接用UdpClient也可以
Socket broadcastSocket = new Socket(AdressFamily.InterNetwork,SocketType.Dgram,ProtocolType.Udp);
//设置套接字以广播形式发送
broadcastSocket.SetSocketOption(SocketOptionLevel.Socket,SocketOptionName.Broadcast,1);
IPEndPoint broadcastIP = new IPEndPoint(IPAdress.Broadcast,8888);
broadcastSocket.SendTo(sendbyte,broadcastIP);
byte[] data = broadcastSocket.Receive(ref remoteEP); 


7.java中通过Proxy实现网络代理,可在打开URLConnection连接时指定Proxy,而且创建Socket连接时也可以指定Proxy。java还提供了一个ProxySelector代理选择器,可以对HTTP、HTTPS、FTP、SOCKS等进行分别设置,可达到在IE和火狐等浏览器设置代理服务器类似的效果。而C#中对代理的支持没有java全面友好,有WebProxy用来处理HTTP、HTTPS类的网站请求,也可以通过RemoteClass类库下的Remote、ChannelServices等类,间接达到类似功能。不过总的来说很少用到代理功能。


8.java中DatagramSocket只允许数据包发送给指定的目标地址,而MulticastSocket可以将数据包以广播形式发送到多个客户端,事实上MulticastSocket是DatagramSocket的一个子类。

MulticastSocket socket = new MulticastSocket(8888);
InetAddress broadcastAdress = InetAddress.getByName("192.168.3.1");  //多点广播地址
//将该套接字加入指定的多点广播地址
socket.joinGroup(broadcastAdress);
//设置发送的数据是否被会送到自身
socket.setLoopbackMode(false);
DatagramPacket outPacket = new DatagramPacket(new byte[0], 0, broadcastAdress, 8888);
socket.send(outPacket);     //接收的处理类似


9.java中ServerSocket接收的客户端套接字队列,默认数量为50个。


10.java中要实现建议浏览器将非常麻烦,系统环境没提供需要自己写或者找开源框架,而C#中的winform里面有自带的WebBrowser控件,其内核是IE,大部分底层实现也已被封装好了,直接使用即可。同样的,这种情况也出现在邮件的发送和接收开发上,java需要第三方组件,而C#在开发环境是自带的,通过MailMessage等类即可用来实现此功能。

猜你喜欢

转载自blog.csdn.net/u014650759/article/details/79706036
今日推荐