您的位置:首页 > 理论基础 > 计算机网络

JAVA高级05--网络编程--要点总结

2011-03-13 11:31 501 查看
JAVA高级05_网络编程

1.IP地址和Port(端口号)

本地回路的IP地址:127.0.0.1,特殊IP地址,不经过网卡。没有和网卡绑定。

Port两个字节,不同的应用程序使用不同的端口进行通信。0—65535,0—1023之间的端口数是用于一些知名的网络服务和应用。发送数据包时必须指明端口号。

2.Socket是网络驱动层提供给应用程序编程的接口和一种机制。Socket在应用程序中创建,通过一种绑定机制与驱动程序建立关系,告诉自己所对应的IP和Port。

3.网络数据的收发都是最终经过驱动程序(网卡)来完成的。

4.DatagramSocket类用于UDP通信。ServerSocket类用于TCP通信的服务器端。Socket类用于TCP通信的服务器和客户端。

5.如果计算机只有一个IP地址,通常就不会去指定IP地址,直接使用系统默认。而如果计算机有多个IP地址,就应该指定确定的IP地址。

6.如果把DatagramSocket比作创建港口的码头,那么DatagramPacket就是发送和接受数据的集装箱。

7.InetAddress是用于表示计算机IP地址的一个类。

8.在命令行中通过输入start命令可以重新打开一个窗口,而且此窗口的设置将和原窗口保持一致,包括光标位置和classpath等。

9.UDP编程实践:

package chattest;

import java.awt.*;
import java.awt.event.*;
import java.net.*;

public class Chat extends Frame {

/**
* @param args
*/
List list = new List(8);
TextField t1 = new TextField("127.0.0.1",15);
TextField t2 = new TextField(20);
Panel p = new Panel();
DatagramSocket ds = null;
public Chat() {
p.add(t1, "West");
p.add(t2, "East");
this.add(list, "Center");
this.add(p, "South");

try {
ds = new DatagramSocket();

} catch (SocketException e1) {
e1.printStackTrace();
}
t2.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
byte[] buf = t2.getText().getBytes();
try {
DatagramPacket dp = new DatagramPacket(buf,buf.length,
InetAddress.getByName(t1.getText()),3555);
ds.send(dp);
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
t2.setText("");

}
});
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
ds.close();
dispose();
System.exit(0);
}
});
new Thread(new Runnable() {
public void run() {
try {
byte[] buf = new byte[1024];
ds = new DatagramSocket(3555);
DatagramPacket dp = new DatagramPacket(buf, buf.length);
while(true) {
ds.receive(dp);
String str = new String(buf, 0, dp.getLength());//注意:此处一定要通过dp.getLength()获得数据长度
//否则系统会以为数据长度为1024,从而如果像下面再增加字符串的时候,系统打印就会出现异常。
String strin = str + " from " + dp.getAddress().getHostAddress()+ ":" + dp.getPort();
System.out.println(strin);
list.add(strin, 0);
}
} catch (Exception e) {
if(!ds.isClosed())
e.printStackTrace();
}

}
}).start();
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Chat c = new Chat();
c.setTitle("Let's Chat");
c.setSize(330,400);
c.setResizable(false);
c.setVisible(true);

}

}


13.私有IP通过网关代理上网的原理,端口映射表。私有IP的某个端口通过映射表和网关的某个端口对应,然后又网关和外部网通信。端口映射表是动态的,只有私有IP先向外发送数据,才会临时建立这个映射表。

14.TCP客户端程序与TCP服务端程序的交互过程:1.服务器程序创建一个serversocket,调用accept方法等待客户来连接。2.客户端程序创建一个socket并请求与服务器连接。3.服务器接收请求并建立一个新的socket和该客户建立专线连接。4.建立了连接的两个socket在一个单独的线程(由服务器程序创建)上对话。5.服务器开始等待新的连接请求,当新的连接请求到达时,重复步骤2和步骤5的过程。相当于114总机台接受客户打电话的情况一样。

15.在Dos窗口下输入telnet,可以调用windows系统自带的客户端,命令格式是“telnet IP地址 Port”,从而可以和服务器程序进行通信。

16.编写TCP服务器端程序,利用telent和服务器之间进行通信。

package urltest;
import java.net.*;
import java.util.*;
import java.io.*;
public class URLTest {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
getContentofLan("ja");
}
public static void getContentofLan(String lan) {
try {
URL url = new URL("http://www.google.com");//注意:此处一定要加"http://",否则程序将找不到地址。
HttpURLConnection huc = (HttpURLConnection)url.openConnection();
huc.addRequestProperty("Accept-Language",lan);
Map request = huc.getRequestProperties();
Set rs = request.keySet();
Iterator it = rs.iterator();
while(it.hasNext()) {
String field = (String)it.next();
System.out.println(field + huc.getRequestProperty(field));
}
huc.connect();
Map response = huc.getHeaderFields();
Set res = response.keySet();
Iterator itr = res.iterator();
while(itr.hasNext()) {
//System.out.println("大家好啊!");
String field = (String)itr.next();
System.out.println(field + huc.getHeaderField(field));
}

InputStream in = huc.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(in));
String str;
while((str = br.readLine())!= null) {
System.out.println(str);
}
br.close();
huc.disconnect();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: