一、套接字Socket
IP地址标志Internet上的计算机,端口号标志正在计算机上运行的进程(程序)。
端口号被规定为一个16位的0--65535之间的整数,其中,0--1023被预先定义的服务通信占用。
当两个程序需要通信时,可以通过Socket类建立套接字对象并连接在一起。(端口号与IP地址的组合得出的一个网络套接字)
二、示例
(1)客户端服务器端一对一;聊天
1 package mychat;
2
3 import java.io.BufferedReader;
4 import java.io.BufferedWriter;
5 import java.io.IOException;
6 import java.io.InputStreamReader;
7 import java.io.OutputStreamWriter;
8 import java.net.Socket;
9 import java.net.UnknownHostException;
10
11 public class Client {
12
13 /**
14 * @param args
15 */
16 public static void main(String[] args) {
17 // TODO Auto-generated method stub
18 Socket client = null;
19 //读服务器说的话
20 BufferedReader br = null;
21 //写个服务器
22 BufferedWriter bw = null;
23 //读键盘
24 BufferedReader input = null;
25 try {
26 client = new Socket("127.0.0.1",6666);
27 while(true)
28 {
29 //从键盘写
30 System.out.println("客户端说:");
31 input = new BufferedReader(new InputStreamReader(System.in));
32 String str = input.readLine();
33 //写给服务器
34 bw = new BufferedWriter(new OutputStreamWriter(client.getOutputStream()));
35 bw.write(str);
36 bw.newLine();
37 bw.flush();
38 //接受服务器信息
39 br = new BufferedReader(new InputStreamReader(client.getInputStream()));
40 String line =null;
41 line = br.readLine();
42 System.out.println("服务器说"+line);
43 }
44
45
46 } catch (UnknownHostException e) {
47 // TODO Auto-generated catch block
48 e.printStackTrace();
49 } catch (IOException e) {
50 // TODO Auto-generated catch block
51 e.printStackTrace();
52 }
53
54 }
55
56 }
1 package mychat;
2
3 import java.io.BufferedReader;
4 import java.io.BufferedWriter;
5 import java.io.IOException;
6 import java.io.InputStreamReader;
7 import java.io.OutputStreamWriter;
8 import java.net.ServerSocket;
9 import java.net.Socket;
10
11 public class Server {
12
13 public static void main(String[] args) {
14 // TODO Auto-generated method stub
15 BufferedReader input = null;
16 BufferedWriter bw =null;
17 BufferedReader br = null;
18 Socket socket = null;
19 try {
20 ServerSocket server = new ServerSocket(6666);
21
22 System.out.println("等待客户端响应");
23 socket = server.accept();
24 System.out.println("与客户端建立连接");
25 //读
26 br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
27 //写
28 bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
29 input = new BufferedReader(new InputStreamReader(System.in));
30
31
32 while(true)
33 {
34 String line = br.readLine();
35 System.out.println("客户端说:"+line);
36 //写
37
38 System.out.println("请输入服务器说的话");
39 String str = input.readLine();
40 bw.write(str);
41 bw.newLine();
42 bw.flush();
43 System.out.println("服务器说:"+str);
44 }
45
46 } catch (IOException e) {
47 // TODO Auto-generated catch block
48 e.printStackTrace();
49 }
50 finally{
51 try {
52 br.close();
53 } catch (IOException e) {
54 // TODO Auto-generated catch block
55 e.printStackTrace();
56 }
57 try {
58 bw.close();
59 } catch (IOException e) {
60 // TODO Auto-generated catch block
61 e.printStackTrace();
62 }
63 try {
64 input.close();
65 } catch (IOException e) {
66 // TODO Auto-generated catch block
67 e.printStackTrace();
68 }
69 try {
70 socket.close();
71 } catch (IOException e) {
72 // TODO Auto-generated catch block
73 e.printStackTrace();
74 }
75
76 }
77 }
78
79 }
(2)客户端上传文件(字符)
1 package loadzifu;
2
3 import java.io.BufferedReader;
4 import java.io.BufferedWriter;
5 import java.io.File;
6 import java.io.FileReader;
7 import java.io.IOException;
8 import java.io.InputStreamReader;
9 import java.io.OutputStreamWriter;
10 import java.net.Socket;
11 import java.net.UnknownHostException;
12
13 public class Client {
14
15 /**
16 * @param args
17 */
18 public static void main(String[] args) {
19 // TODO Auto-generated method stub
20 Socket client = null;
21 //读文件名
22 BufferedReader input = new BufferedReader(new InputStreamReader(System.in));
23 //读本地文件
24 File f=null;
25 BufferedReader brFile = null;
26 BufferedWriter bw = null;
27 try {
28 client = new Socket("127.0.0.1",6666);
29 bw = new BufferedWriter(new OutputStreamWriter(client.getOutputStream()));
30 System.out.println("请输入要上传的文件");
31 String fileName = input.readLine();
32 brFile = new BufferedReader(new FileReader(("src/chat/"+fileName)));
33 String line =null;
34 while((line= brFile.readLine())!=null)
35 {
36 //写个客户端
37 bw.write(line);
38 bw.newLine();
39 bw.flush();
40
41 }
42
43 } catch (UnknownHostException e) {
44 // TODO Auto-generated catch block
45 e.printStackTrace();
46 } catch (IOException e) {
47 // TODO Auto-generated catch block
48 e.printStackTrace();
49 }
50 finally{
51 try {
52 bw.close();
53 } catch (IOException e) {
54 // TODO Auto-generated catch block
55 e.printStackTrace();
56 }
57 try {
58 brFile.close();
59 } catch (IOException e) {
60 // TODO Auto-generated catch block
61 e.printStackTrace();
62 }
63 try {
64 input.close();
65 } catch (IOException e) {
66 // TODO Auto-generated catch block
67 e.printStackTrace();
68 }
69 }
70
71
72 }
73
74 }
1 package loadzifu;
2
3 import java.io.BufferedReader;
4 import java.io.BufferedWriter;
5 import java.io.File;
6 import java.io.FileOutputStream;
7 import java.io.FileWriter;
8 import java.io.IOException;
9 import java.io.InputStreamReader;
10 import java.io.OutputStreamWriter;
11 import java.net.ServerSocket;
12 import java.net.Socket;
13
14 public class Server {
15
16 /**
17 * @param args
18 */
19 public static void main(String[] args) {
20 // TODO Auto-generated method stub
21 ServerSocket server = null;
22 Socket socket = null;
23 BufferedReader br =null;
24 BufferedWriter bwFile = null;
25 try {
26 server = new ServerSocket(6666);
27 System.out.println("等待客户端连接");
28 socket = server.accept();
29 System.out.println("与客户端建立连接");
30 File f = new File("src/loadzifu/a.txt");
31 bwFile = new BufferedWriter(new FileWriter(f));
32 br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
33 String str = null;
34 while((str=br.readLine())!=null)
35 {
36 bwFile.write(str);
37 bwFile.newLine();
38 bwFile.flush();
39 }
40
41 } catch (IOException e) {
42 // TODO Auto-generated catch block
43 e.printStackTrace();
44 }
45 finally{
46 try {
47 br.close();
48 } catch (IOException e) {
49 // TODO Auto-generated catch block
50 e.printStackTrace();
51 }
52 try {
53 bwFile.close();
54 } catch (IOException e) {
55 // TODO Auto-generated catch block
56 e.printStackTrace();
57 }
58 try {
59 socket.close();
60 } catch (IOException e) {
61 // TODO Auto-generated catch block
62 e.printStackTrace();
63 }
64 }
65
66 }
67
68 }
(3)客户端上传文件(字节)
1 package loadzijie;
2
3 import java.io.BufferedInputStream;
4 import java.io.BufferedOutputStream;
5 import java.io.BufferedReader;
6 import java.io.File;
7 import java.io.FileInputStream;
8 import java.io.IOException;
9 import java.io.InputStream;
10 import java.io.InputStreamReader;
11 import java.net.Socket;
12 import java.net.UnknownHostException;
13
14 public class Client {
15
16 public static void main(String[] args) {
17 // TODO Auto-generated method stub
18 Socket client = null;
19 //读文件
20 BufferedInputStream bisFile = null;
21 //源文件
22 File f = null;
23 //读键盘
24 BufferedReader input = null;
25 //写个服务器
26 BufferedOutputStream bos = null;
27 try {
28 client = new Socket("127.0.0.1",7777);
29
30 System.out.println("请输入要复制的文件");
31 input = new BufferedReader(new InputStreamReader(System.in));
32 String fileName = input.readLine();
33 f = new File("src/chat/"+fileName);
34 //读文件
35 bisFile = new BufferedInputStream(new FileInputStream(f));
36 bos = new BufferedOutputStream(client.getOutputStream());
37 int len=0;
38 byte bytes[] = new byte[1024];
39 while((len=bisFile.read(bytes))!=-1)
40 {
41 bos.write(bytes,0,len);
42 bos.flush();
43 }
44
45
46
47
48 } catch (UnknownHostException e) {
49 // TODO Auto-generated catch block
50 e.printStackTrace();
51 } catch (IOException e) {
52 // TODO Auto-generated catch block
53 e.printStackTrace();
54 }finally{
55 try {
56 bos.close();
57 } catch (IOException e) {
58 // TODO Auto-generated catch block
59 e.printStackTrace();
60 }
61 try {
62 client.close();
63 } catch (IOException e) {
64 // TODO Auto-generated catch block
65 e.printStackTrace();
66 }
67 try {
68 bisFile.close();
69 } catch (IOException e) {
70 // TODO Auto-generated catch block
71 e.printStackTrace();
72 }
73 }
74
75 }
76
77 }
1 package loadzijie;
2
3 import java.io.BufferedInputStream;
4 import java.io.BufferedOutputStream;
5 import java.io.BufferedWriter;
6 import java.io.File;
7 import java.io.FileInputStream;
8 import java.io.FileOutputStream;
9 import java.io.IOException;
10 import java.net.ServerSocket;
11 import java.net.Socket;
12
13 public class Server {
14
15 public static void main(String[] args) {
16 // TODO Auto-generated method stub
17 ServerSocket server = null;
18 Socket socket = null;
19 File f = null;
20 BufferedInputStream bis = null;
21 BufferedOutputStream bosFile = null;
22
23 try {
24 server = new ServerSocket(7777);
25 System.out.println("等待客户端连接");
26 socket = server.accept();
27 System.out.println("与客户端建立连接");
28 f = new File("src/loadzijie/dd.bmp");
29 bis = new BufferedInputStream(socket.getInputStream());
30 bosFile = new BufferedOutputStream(new FileOutputStream(f));
31 int len =0;
32 byte bytes[] = new byte[1024];
33 while((len = bis.read(bytes))!=-1)
34 {
35 //写文件
36 bosFile.write(bytes,0,len);
37 bosFile.flush();
38
39 }
40 System.out.println("上传成功");
41
42
43 } catch (IOException e) {
44 // TODO Auto-generated catch block
45 e.printStackTrace();
46 }
47 finally{
48 try {
49 bis.close();
50 } catch (IOException e) {
51 // TODO Auto-generated catch block
52 e.printStackTrace();
53 }
54 try {
55 bosFile.close();
56 } catch (IOException e) {
57 // TODO Auto-generated catch block
58 e.printStackTrace();
59 }
60 try {
61 socket.close();
62 } catch (IOException e) {
63 // TODO Auto-generated catch block
64 e.printStackTrace();
65 }
66 }
67 }
68
69 }
(4)服务器端多线程接受客户端文件
1 package loadget;
2
3 import java.io.BufferedInputStream;
4 import java.io.BufferedOutputStream;
5 import java.io.BufferedReader;
6 import java.io.File;
7 import java.io.FileInputStream;
8 import java.io.IOException;
9 import java.io.InputStreamReader;
10 import java.net.Socket;
11 import java.net.UnknownHostException;
12
13 public class Client {
14
15 /**
16 * @param args
17 */
18 public static void main(String[] args) {
19 // TODO Auto-generated method stub
20 Socket client = null;
21 File f = null;
22 //读键盘
23 BufferedReader input = null;
24 //读文件
25 BufferedInputStream brFile = null;
26 //上传服务器
27 BufferedOutputStream bos = null;
28 try {
29 client = new Socket("127.0.0.1",7777);
30 System.out.println("请输入要上传的文件");
31 input = new BufferedReader(new InputStreamReader(System.in));
32 String fileName = input.readLine();
33 bos = new BufferedOutputStream(client.getOutputStream());
34 f = new File(("src/chat/"+fileName));
35 //读文件
36 brFile = new BufferedInputStream(new FileInputStream(f));
37 int len =0;
38 byte bytes[]= new byte[1024];
39 while((len=brFile.read(bytes))!=-1)
40 {
41 bos.write(bytes,0,len);
42 bos.flush();
43 }
44
45 } catch (UnknownHostException e) {
46 // TODO Auto-generated catch block
47 e.printStackTrace();
48 } catch (IOException e) {
49 // TODO Auto-generated catch block
50 e.printStackTrace();
51 }
52 finally{
53 try {
54 bos.close();
55 } catch (IOException e1) {
56 // TODO Auto-generated catch block
57 e1.printStackTrace();
58 }
59 try {
60 brFile.close();
61 } catch (IOException e1) {
62 // TODO Auto-generated catch block
63 e1.printStackTrace();
64 }
65 try {
66 client.close();
67 } catch (IOException e) {
68 // TODO Auto-generated catch block
69 e.printStackTrace();
70 }
71 }
72
73 }
74
75 }
1 package loadget;
2
3 import java.io.BufferedInputStream;
4 import java.io.BufferedOutputStream;
5 import java.io.File;
6 import java.io.FileOutputStream;
7 import java.io.IOException;
8 import java.net.ServerSocket;
9 import java.net.Socket;
10
11 public class Server {
12
13 /**
14 * @param args
15 */
16 public static void main(String[] args) {
17 // TODO Auto-generated method stub
18 ServerSocket server = null;
19 //接受文件
20
21
22 try {
23 server = new ServerSocket(7777);
24
25 while(true)
26 {
27
28 System.out.println("等待与客户端连接");
29 final Socket sock = server.accept();
30 System.out.println("与客户端建立连接");
31 new Thread(new Runnable() {
32 BufferedInputStream bis = null;
33 //写文件
34 BufferedOutputStream bos =null;
35 @Override
36 public void run() {
37 // TODO Auto-generated method stub
38 try {
39
40 bis = new BufferedInputStream(sock.getInputStream());
41 int a = (int)(Math.random()*10000+2);
42 System.out.println("a:"+a);
43 File fileName = new File("src/loadget/a.txt");
44 bos = new BufferedOutputStream(new FileOutputStream(fileName));
45 int len =0;
46 byte bytes[] = new byte[1024];
47 while((len=bis.read(bytes))!=-1)
48 {
49 bos.write(bytes,0,len);
50 bos.flush();
51 }
52
53 } catch (IOException e) {
54 // TODO Auto-generated catch block
55 e.printStackTrace();
56 }
57 finally{
58 try {
59 bos.close();
60 } catch (IOException e) {
61 // TODO Auto-generated catch block
62 e.printStackTrace();
63 }
64 try {
65 bis.close();
66 } catch (IOException e) {
67 // TODO Auto-generated catch block
68 e.printStackTrace();
69 }
70 try {
71 sock.close();
72 } catch (IOException e) {
73 // TODO Auto-generated catch block
74 e.printStackTrace();
75 }
76 }
77
78 }
79 }).start();
80 }
81
82
83 } catch (IOException e) {
84 // TODO Auto-generated catch block
85 e.printStackTrace();
86 }
87 }
88 }