网络编程
来源:互联网 发布:淘宝卖家威胁我怎么办 编辑:程序博客网 时间:2024/06/05 18:08
InetAddress 一个ip实例
import java.net.InetAddress;class InetAddressTest{public static void main(String[] args) throws Exception{//根据主机名获取对应实例InetAddress ip = InetAddress.getByName("www.baidu.com");System.out.println(ip); //在给定主机名的情况下确定主机的IP地址 输出:www.baidu.com/220.181.111.148System.out.println(ip.isReachable(2000)); //测试是否可以达到该地址 false//根据ip地址获取InetAddress实例InetAddress local = InetAddress.getByAddress(new byte[]{127,0,0,1});System.out.println(local); //输出 /127.0.0.1System.out.println(local.isReachable(2000));//trueSystem.out.println(local.getHostAddress()); // 返回 IP 地址字符串(以文本表现形式)输出:127.0.0.1System.out.println(local.getHostName()); //获取此 IP 地址的主机名 输出: 127.0.0.1}}
URLEncoder URLDecoder
编码和解码
浏览器地址栏中文的“乱码”其实是application/x-www.-form-urlencoded MIME字符串
import java.net.URLDecoder;import java.net.URLEncoder;class URLTest {public static void main(String[] args) throws Exception{String url = URLEncoder.encode("网址","utf-8");System.out.println(url); //%E7%BD%91%E5%9D%80url = URLDecoder.decode("%E7%BD%91%E5%9D%80","utf-8");System.out.println(url); //网址}}
最简单的UDP程序
发送端:
DatagramSocket :此类表示用来发送和接收数据报包的套接字
DatagramPacket: 此类表示数据报包
113.14.208.112是本机ip地址,我的电脑-网络-右键属性-宽带连接-详细信息 可以查看
import java.net.*;class UdpSend {public static void main(String[] args) throws Exception{DatagramSocket ds = new DatagramSocket();String strInfo = "hello www.it315.org";ds.send(new DatagramPacket("hello www.it315.org".getBytes(),"hello www.it315.org".length(),InetAddress.getByName("113.14.208.112"),3000));ds.close();}}
接收端: cmd中输入start打开一个新窗口,接收端先运行,发送端后运行
import java.net.*;class UdpRecv {public static void main(String[] args) throws Exception{DatagramSocket ds = new DatagramSocket(3000);byte[] buf = new byte[1024];DatagramPacket dp = new DatagramPacket(buf,1024);ds.receive(dp);System.out.println("接受字符串:" + new String(dp.getData(),0,dp.getLength()));System.out.println("发送方IP:" + dp.getAddress().getHostAddress());System.out.println("发送方端口" + dp.getPort());ds.close();}}
Tcp程序
创建tcp程序,accept()等待连接
1.运行服务器端程序
2.新开一个窗口,输入telnet 113.14.208.112 8001
此时连接服务器端,然后服务器端输出流welcome to ....... 在telnet窗口显示出来
3.输入任意字符,服务器端将会打印出来
import java.net.*;import java.io.*;class TcpServer {public static void main(String[] args) throws Exception{ServerSocket ss = new ServerSocket(8001); //创建绑定到特定端口的服务器套接字Socket s = ss.accept(); //侦听并接受到此套接字的连接InputStream ips = s.getInputStream();OutputStream ops = s.getOutputStream();ops.write("welcome to www.it315.org".getBytes());//byte[] buf = new byte[1024]; //int len = ips.read(buf); //一读到数据,马上读出来,输入abc,只输入到a程序就结束了//System.out.println(new String(buf,0,len));//字节流到字符流的转换BufferedReader br = new BufferedReader(new InputStreamReader(ips));System.out.println(br.readLine()); //一次读取一行ips.close(); //注意关闭顺序ops.close();s.close();ss.close();}}一个自己发送接收数据的例子
输入ip和数据,回车后发送,并显示在窗口上
import java.awt.*;import java.awt.event.*;import java.net.*;class Chat extends Frame {List list = new List(6); //6条信息 超过6条用滚动条显示TextField tfIP = new TextField(15); //IP地址文本框TextField tfData = new TextField(20); //输入文本框DatagramSocket ds = null;public Chat(){try{ds = new DatagramSocket(3000);}catch(Exception e){e.printStackTrace();}/*界面*/this.add(list,"Center");Panel p = new Panel();this.add(p, "South");p.setLayout(new BorderLayout());p.add(tfIP, "West");p.add(tfData, "East");/*接受数据 单独的线程*/new Thread(new Runnable(){public void run(){byte[] buf = new byte[1024];DatagramPacket dp = new DatagramPacket(buf,1024);while(true){try{ds.receive(dp);list.add(new String(buf,0,dp.getLength()) + " from " + dp.getAddress().getHostAddress() + ":" + dp.getPort(),0);}catch(Exception e){if(!ds.isClosed()){ //关闭后才输出异常,否则在关闭窗口后ds.close()还没有关闭,这里会报异常e.printStackTrace();}}}}}).start();/*发送数据*/tfData.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){byte[] buf;buf = tfData.getText().getBytes();try{DatagramPacket dp = new DatagramPacket(buf,buf.length,InetAddress.getByName(tfIP.getText()),3000);ds.send(dp);}catch(Exception ex){ //在ActionEvent e已经有e的变量的ex.printStackTrace();}tfData.setText("");}});/*关闭窗口*/addWindowListener(new WindowAdapter(){public void windowClosing(WindowEvent e){ds.close(); //关闭窗口前关闭dsdispose();System.exit(0);}});}public static void main(String[] args){Chat chat = new Chat();chat.setSize(300,400); //宽高chat.setTitle("Chat"); //标题chat.setVisible(true); //可见chat.setResizable(false); //不可改变大小}}完善的TCP服务器程序模型
服务器程序能够与多个客户端会话,客户端向服务器发送一行文本
服务器将文本反序排列发送给客户端,发送"quti"时,服务器结束与客户端的会话
编写要点:
1.TCP服务器要想接受多个客户端的连接,需要循环调用ServerSocket accept方法
2.服务器成语与每个客户端的会话过程不能互相影响,需要在独立的线程中运行
3.一个线程服务对象与一个服务端Socket对象相关联,共同来完成与一个客户端的会话
使用运行:
1.首先cmd一个窗口,然后start多个窗口
2.运行服务端程序RerverServer
3.某一个新窗口中telnet 127.0.0.1 8001 ,之后输入abc,则服务端显示abc,然后返回给客户端一个反序文本
RerverServer 服务端
import java.net.*;class ReverseServer {public static void main(String[] args) {boolean bRunning = true;try{ServerSocket ss = new ServerSocket(8001);while(bRunning){Socket s = ss.accept();new Thread(new Servicer(s)).start();}ss.close();}catch(Exception e){e.printStackTrace();}}}import java.net.*;import java.io.*;class Servicer implements Runnable{private Socket s = null;public Servicer(Socket s){this.s = s;}public void run(){try{InputStream ips = s.getInputStream();OutputStream ops = s.getOutputStream();BufferedReader br = new BufferedReader(new InputStreamReader(ips));PrintWriter pw = new PrintWriter(ops,true);while(true){String strLine = br.readLine();if(strLine.equalsIgnoreCase("quit")){break;}System.out.println(strLine);String strEcho = new StringBuffer(strLine).reverse().toString();pw.println(strLine + "-->" + strEcho);}br.close();pw.close();s.close();}catch(Exception e){e.printStackTrace();}}}
- 网络编程
- 网络编程
- 网络编程
- 网络编程
- 网络编程
- 网络编程
- 网络编程
- 网络编程
- 网络编程
- 网络编程
- 网络编程
- 网络编程
- 网络编程
- 网络编程
- 网络编程
- 网络编程
- 网络编程
- 网络编程
- C# 参考之方法参数关键字:params、ref及out
- 转:WPF and Silverlight 学习笔记(二十):WPF数据绑定概述
- Android进阶2之图片倒影效果
- NSDateFormatter时区问题
- vs2005+ ogre 出现“应用程序正常初始化(0xc0150002)失败”的解决方法
- 网络编程
- mac系统这么让人着迷...用着真讨厌换到windows下...ubuntu也远远不及...
- 基于蓝牙模块ROK101 007/1的小区监控系统设计
- JAVA基础复习(四)借助Set遍历Map
- axis为amchart左右轴的参数
- RDF data
- 解C1控件加载Excel出错问题
- delphi下COM+服务器代码调试的设置
- Android中使用XML自定义组件各种状态下的背景图片