原文:http://blog.csdn.net/qjyong/archive/2009/09/15/4556527.aspx
author:qjyong
1.端口号:标识计算机的某一网络程序,TCP和UDP可使用同一端口
2.
传输协议:
TCP:传输控制协议:面向连接,数据传输可靠,有序(数据完整,效率低).
(ServerSocket和Socket类)
UDP:用户数据报协议:面向非连接,不可靠,无序(不保证完整性,效率高,
一次最多64kb)
DatagramSocket,DatagramPacket,MulicastSocket.
应用协议:HTTP,FTP,TELNET,SMTP;
3.InetAddress(IP或域名抽象)
InetAddress.getByName("IP");//获得实例.
4.Socket套接字
1)流式套接字(TCP):IO流进行传输,双向
2)数据报式套接字(UDP):数据报传输.
5.TCP编程
a)ServerSocket:监听端口,接收客户端连接
ServerSocket(int port);
accept() //监听,接收,返回客户端套接字(接收到连接前一直阻塞)
close()
b)Socket 客户端套接字
getInputStream() 关闭InputStream,OutputStream将关闭套接字
close 将关闭InputStream,OutputStream
6.udp编程
要发送的数据长度用字节数组.length来获取。接收数据的缓冲区应该指定为UDP可发送的字节最大数(65536)。64K
7.多接受者
广播(broadcast):发送给本地网络所有计算机
多播(Multicast):发送给感兴趣的计算机.加入指定的多播组
224.0.0.0-239.255.255.255
8.URL getConnetion 到url的远程对象连接
8. URLEncoder和URLDecoder类
HTML格式的编码工具类
对‘a-zA-Z0-9.*_-’之外的字符都会进行编码。(空格会转换成+)
//client
public class TCPClient {
/**
* @param args
* @author likf
* @throws IOException
* @throws UnknownHostException
*/
public static void main(String[] args) throws UnknownHostException, IOException {
try {
System.out.println("start client...");
Socket socket = new Socket("127.0.0.1", 4700);
BufferedReader sin = new BufferedReader(new InputStreamReader(System.in));
PrintWriter os = new PrintWriter(socket.getOutputStream());
BufferedReader is = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String readline;
int i = 0;
do {
if (i > 0) {
System.out.println();
String getLine=is.readLine();
System.out.println(i + "=========================");
System.out.println("Server:" + getLine);
System.out.println("=========================");
System.out.print("reading:");
}
readline = sin.readLine();//read
os.println(readline);
os.flush();
i++;
} while (!readline.equals("bye!"));
os.close();
is.close();
socket.close();
} catch (Exception e) {
System.out.println("Error" + e);
}
}
public static void client() throws UnknownHostException, IOException {
Socket client = new Socket("127.0.0.1", 6789);
PrintWriter out = new PrintWriter(new OutputStreamWriter(client.getOutputStream()), true);
out.println("要发送给服务器端的请求数据");
BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()));
in.readLine(); //读取一行。在读取一行前会阻塞。
client.close();
}
}
//server
public class TCP {
public static void main(String[] args) throws IOException {
try {
int i=Integer.parseInt("1");//获取int
int ii=Integer.valueOf("11");//获取int
System.out.println("start server..");
ServerSocket server = null;
try {
server = new ServerSocket(4700);
} catch (Exception e) {
System.out.println("can not listen to:" + e);
}
Socket socket = null;
try {
socket = server.accept();
//使用accept()阻塞等待客户请求,有客户
//请求到来则产生一个Socket对象,并继续执行
} catch (Exception e) {
System.out.println("Error." + e);
}
String line;
BufferedReader is = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter os = new PrintWriter(socket.getOutputStream());
BufferedReader sin = new BufferedReader(new InputStreamReader(System.in));
do{
String getLine=is.readLine();
print(getLine);
line=sin.readLine();
os.println(line);
os.flush();
} while (!line.equals("bye"));
os.close();
is.close();
socket.close();
server.close();
} catch (Exception e) {
System.out.println("Error:" + e);
}
}
public static void print(String s){
System.out.println();
System.out.println("=========================");
System.out.println("Client:" +s );
System.out.println("=========================");
System.out.print("reading:");
}
public static void server() throws IOException {
ServerSocket server = new ServerSocket(6789);
Socket client = server.accept(); //在接收到客户端连接前,会阻塞,直到获取数据
BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()));
in.readLine(); //读取一行。在读取一行前会阻塞。
PrintWriter out = new PrintWriter(new OutputStreamWriter(client.getOutputStream()), true);
out.println("要返回给客户端的响应数据");
client.close();
server.close();
}
}