1 网络编程:
--网络协议TCP/IP协议
--ip地址和端口号port.
本地回路ip地址是127.0.0.1,端口号的范围为0-65535。0-1023是用于一些知名的网络服务和应用。
-- TCP和UDP
TCP: 传输控制协议,面向连接的协议,是可靠的,连接时要经过三次握手。
UDP: 用户数据包协议,数据传输是不可靠的,传输效率高,可以向多个主机发送消息。
DatagrameSocket 用于UDP通信
ServerScoket用于TCP的服务器端
Socket 是网络编程驱动层提供给应用程序编程飞接口和一种机制,在应用程序中创建,通过一种绑定机制与驱动程序建立关系,告诉自己所对应的IP和Port
在发送中如果没有指定ip和port 系统都提供默认的ip和port .
DatagrameSocket 类 ,了解它的构造方法,public DatagramSocket()系统自动为它分配一个port.适合于先发送。public DatagramSocket(int port)。 Receive(),Send()用于发送和接收。DatagramPacket类public DatagramPacket(byte[] buf,int length InetAddress address, int port) 适用于发送方 .可以使用getPort(),getInetAddress()可以获得发送方的port和ip.InetAddress类的介绍:getLocalHost() getHostName() 返回主机名,getByName(String host)返回ip.简单的举例:package Net;
import java.net.*;
public class UDPRes {
public static void main(String[] args) throws Exception {
DatagramSocket dgs = new DatagramSocket(8000);
byte [] bb = new byte[2048] ;
DatagramPacket dp = new DatagramPacket(bb,2048);
dgs.receive(dp);
System.out.println(new String(dp.getData(),0,dp.getLength())+dp.getPort()+dp.getAddress());
}
}
package Net;
import java.net.*;
public class UDPSend {
public static void main(String[] args) throws Exception {
DatagramSocket ds = new DatagramSocket();
String s = "lidage,小名你好n怎么少接受了一个呢";
ds.send(new DatagramPacket(s.getBytes(), s.getBytes().length,//这里要注意,这里是发送字节的个数,而不是字符串的长度 InetAddress
.getByName("192.168.0.100"), 8000));
ds.close();
}
}
TCP 客户端程序 与TCP 客户端服务的交互过程:
服务器创建一个ServerSocket ,然后调用accept()等待接受,客户端创建一个Socket并和服务器连接,服务器接受到客户端的请求,并创建一个新的Socket与客户端连接,两个建立的Socket在同一个线程中,服务器到达一个新的连接请求。
package Net;
import java.io.IOException;
import java.net.*;
import java.io.*;
public class TCPServer {
public static void main(String[] args) {
ServerSocket ss = new ServerSocket(8001);
Socket s = ss.accept();// 阻塞式方法
InputStream is = s.getInputStream();
OutputStream os = s.getOutputStream();
os.write("huanying".getBytes());
byte[] b = new byte[1024];
int len = is.read(b);
System.out.println(new String(b, 0, len));
is.close();
os.close();
s.close();
ss.close();
}
}
检查端口冲突问题: 使用 netstate –sa 检测。
TCP 网络上传替对象。ObjectInputStream 和ObjectOutputStream 可以从底层输入流中读取对象的类型,可以写入到底层数据流中。ObjectInputStream 和ObjectOutputStream来包装网络底层流。举例:package Net;
import java.io.Serializable;
public class Student implements Serializable {
int id;
String name;
public Student(int id, String name) {
this.id = id;
this.name = name;
}
}
package Net;
import java.io.*;
import java.net.*;
public class TCPClient1 {
public static void main(String[] args) throws Exception {
Socket s = new Socket("127.0.0.1", 8001);
InputStream is = s.getInputStream();
ObjectInputStream ois = new ObjectInputStream(is);
Student stu = (Student) ois.readObject();
System.out.println("id" + stu.id);
System.out.println("name" + stu.name);
ois.close();
is.close();
s.close();
}
}
package Net;
import java.io.*;
import java.net.*;
public class TCPServer1 {
/**
* @param args
*/
public static void main(String[] args) throws Exception{
// TODO Auto-generated method stub
ServerSocket ss = new ServerSocket(8001);
Socket s = ss.accept();
OutputStream ops = s.getOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(ops);
Student st = new Student(110, "xiaoming");
oos.writeObject(st);
oos.close();
ops.close();
ss.close();
}
}