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

网络编程日记(4-01-03)

2011-06-19 13:56 323 查看
04-01
一、网络协议和TCP/IP协议
IP地址和Port端口号:
本地回路的IP地址:127.0.0.1
UDP和TCP区别
TCP:传输控制协议,是面向连接的通信协议
UDP:用户数据报协议,是无连接的通信协议
UDP和TCP数据帧格式简单图例

协议类型
源IP
目标IP
源端口
目标端口
帧序号
帧数据
协议类型用于区分UDP和TCP

二、Socket:是网络驱动层提供给应用程序编程的接口和一种机制。
Socket可以比喻成港口码头
Socket在应用程序中创建,通过一种绑定机制与驱动程序建立联系,告诉自己所对应的IP和Port


三、J***A中的网络编程类
位于Java.Net包中
DatagramSocket类用于UDP通信
ServerSocket类用于TCP通信的服务器端
Socket用于TCP通信的客户端和服务器

04-02:
DatagramSocket三个构造函数:
Public DatagramSocket();
Public DatagramSocket(int
port);
Public DatagramSocket(int
port,InetAddress laddr);

Close()


DatagramPacket是发送和接受数据的集装箱
构造函数:
public DatagramPacket(byte[] btf,int length);
public DatagramPacket(byte[] btf,int length, InetAddress laddr,int port);
InetAddress是表示计算机IP地址的一个类,具有getName()(静态方法)和getHostAddress()方法
getInetAddress和getPort()
getData()和getLength()
最简单的UDP程序:
1、
字符串和字节数组之间的双向转换
2、
UDP接收程序必须先启动,才能接收UDP发送程序发送的数据
3、
用Start命令打开新命令窗口的好处
4、
解决了发送字符串中文问题
发送程序:
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;


public
class UdpSend {




public
static
void main(String[] args)
throws Exception {

DatagramSocket ds=new DatagramSocket();

String info="黑马程序员开课啦!";

ds.send(new DatagramPacket(info.getBytes(),info.getBytes().length,InetAddress.getByName("192.168.1.2"),3000));

ds.close();

}

}


接收程序:
import java.net.DatagramPacket;
import java.net.DatagramSocket;


public
class UdpRecv {


public
static
void main(String[] args)
throws Exception {


DatagramSocket ds=new DatagramSocket(3000);

byte [] btf=new
byte[1024];

DatagramPacket dp=new DatagramPacket(btf,1024);

ds.receive(dp);

System.out.println(new
String(dp.getData(),0, dp.getLength())+":"+

dp.getAddress().getHostAddress()+":"+dp.getPort());

ds.close();

}

}


04-03

用UDP编写网络聊天室

package frame;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;

public
class Chat
extends Frame {


List list=new
List(6);

TextField tfIP=
new TextField(15);

TextField tfData=
new TextField(20);

DatagramSocket ds=null;






public Chat(){

try {

ds=new
DatagramSocket(3000);

} catch (SocketException e1) {

e1.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 [] btf1=new
byte[1024];

DatagramPacket dp2=new DatagramPacket(btf1,1024);

while(true){



try {

ds.receive(dp2);

list.add(new
String(dp2.getData(),0, dp2.getLength())+":"+

dp2.getAddress().getHostAddress()+":"+dp2.getPort());

} catch (IOException e) {

if(!ds.isClosed()){

e.printStackTrace();

}

}



}

}

}).start();







tfData.addActionListener(new
ActionListener(){

public
void actionPerformed(ActionEvent e) {

byte [] btf=tfData.getText().getBytes();

DatagramPacket dp;

try {

dp = new DatagramPacket(btf,btf.length,InetAddress.getByName(tfIP.getText()),3000);

ds.send(dp);

} catch (Exception e1) {

e1.printStackTrace();

}



tfData.setText("");

}

});

addWindowListener(new WindowAdapter(){

public
void windowClosing(WindowEvent e){

dispose();

System.exit(0);

}

});







}





public
static
void main(String[] args) {


System.out.println("程序正在启动.....请稍等!");

Chat mainFrame=new Chat();

mainFrame.setSize(300,400);

mainFrame.setTitle("聊天程序");

mainFrame.setVisible(true);

mainFrame.setResizable(false);

}

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