网络编程:
c/s程序应用:客户端/服务器:QQ:一个客户端,客户端打开之后连接到服务器上;
服务器端改变后客户端有可能也得改变,需要两端维护
b/s程序:浏览器/服务器;
程序分为两种:
基于TCP协议:Socket,可靠的服务;(打电话:A打给B,B收到回应A)
基于UPD协议:不可靠;(短信:A发给B,B不一定收到)
如果要编写一个TCP程序需要java的两个包支持;
java.net.*:主要提供网络支持
ServerSocket类:服务器端程序;
Socket类:客户端程序;
java.io.*:传输信息;
import java.io.*;
import java.net.*;
public class TCPServer{
public static void main(String[] args) throws Exception{
//使用ServerSocket
ServerSocket server=null;
//每一个用户在程序中就是一个Socket
Socket client=null;
server=new ServerSocket(8888);
//等待客户端连接
client=server.accept();
//向客户端打印信息:helloworld
PrintWriter out=null;
//准备向客户端打印信息
out=new PrintWriter(client.getOutputStream());
out.println("hello world");
out.close();
client.close();
server.close();
}
}
运行后悔等待客户端到服务的连接
运行 telnet 命令
o localhost 8888
客户端就两个功能:
建立Socket
接受输入命令(输入流)---》网络上传输的程序靠的是字节流;
import java.io.*;
import java.net.*;
public class TCPClient{
public static void main(String[] args) throws Exception{
//表示一个客户端的Socket
Socket client=null;
//表示一个客户端的输入信息
BufferedReader buf=null;
client=new Socket("localhost",8888);
buf=new BufferedReader(client.getInputStream())
System.out.println(buf.readLine());
buf.close();
client.close()
}
}
UDP:
服务器:
import java.io.*;
import java.net.*;
public class UDPServer{
public static void main(String[] args) throws Exception{
DatagramSocket ds=null;
DatagramPacket dp=null;
//要保证UDP有一个运行的端口
ds=new DatagramSocket(5000);
String s="hello world";
dp=new DatagramPacket(s.getBytes(),0,s.length(),InetAddress.getByName("localhost"),8888);
ds.send(dp);
ds.close();
}
}
客户端;
import java.io.*;
import java.net.*;
public class TCPClient{
public static void main(String[] args) throws Exception{
DatagramSocket ds=null;
DatagramPacket dp=null;
//手机发短信和接受信息是有大小限制的
byte b[]=new byte[1024];
//在8888端口上一直等待信息的到来
ds=new DatagramSocket(8888);
dp=new DatagramPacket(b,b.length);
ds.receive(dp);
//从数据包中取出数据
String str=new String(dp.getBytes(),0,dp.getLength());
dp.setData(s.getBytes());
System.out.prinln("接受到的数据为:"+str);
ds.close();
}
}