The Summer Server Application
1 // In file network/ex1/SummerServer.java
2 import java.net.*;
3 import java.io.*;
4 import java.util.StringTokenizer;
5
6 public class SummerServer {
7
8 public static final int PORT = 2000;
9
10 private static class InvalidLongException
11 extends Exception {
12
13 private String message;
14
15 InvalidLongException(String s) {
16 message = s;
17 }
18
19 public String getMessage() {
20 return message;
21 }
22 }
23
24 public static void main(String[] args)
25 throws IOException {
26
27 ServerSocket listener =
28 new ServerSocket(PORT);
29
30 try {
31
32 for (;;) {
33
34 Socket sock = listener.accept();
35
36 try {
37
38 serveClient(sock);
39 }
40 finally {
41 sock.close();
42 }
43 }
44 }
45 finally {
46 listener.close();
47 }
48 }
49
50 private static void serveClient(Socket sock)
51 throws IOException {
52
53 BufferedReader reader = new BufferedReader(
54 new InputStreamReader(
55 sock.getInputStream()));
56
57 BufferedWriter writer = new BufferedWriter(
58 new OutputStreamWriter(
59 sock.getOutputStream()));
60
61 for (;;) {
62
63 String s = reader.readLine();
64
65 if (s == null) {
66 break;
67 }
68
69 String outString;
70 try {
71 outString =
72 Long.toString(sumString(s));
73 }
74 catch(InvalidLongException e) {
75 outString = e.getMessage();
76 }
77 writer.write(outString);
78 writer.newLine();
79 writer.flush();
80 }
81 }
82
83 private static long sumString(String s)
84 throws InvalidLongException {
85
86 long sum = 0;
87
88 StringTokenizer st = new StringTokenizer(s);
89 String token;
90 while (st.hasMoreTokens()) {
91 token = st.nextToken();
92 try {
93 sum += Long.parseLong(token);
94 }
95 catch (NumberFormatException e) {
96 throw new InvalidLongException(
97 "Invalid number: " + token);
98 }
99 }
100
101 return sum;
102 }
103 }
104 1 // In file network/ex1/SummerClient.java
2 import java.net.*;
3 import java.io.*;
4
5 public class SummerClient {
6
7 public static void main(String[] args)
8 throws IOException {
9
10 InetAddress ia = InetAddress.getByName(null);
11
12 Socket sock = new Socket(ia, SummerServer.PORT);
13
14 try {
15
16 BufferedReader serverReader =
17 new BufferedReader(
18 new InputStreamReader(
19 sock.getInputStream()));
20
21 BufferedWriter serverWriter =
22 new BufferedWriter(
23 new OutputStreamWriter(
24 sock.getOutputStream()));
25
26 LineNumberReader stdinReader =
27 new LineNumberReader(
28 new BufferedReader(
29 new InputStreamReader(
30 System.in)));
31
32 for (;;) {
33
34 String userLine = stdinReader.readLine();
35
36 if (userLine == null ||
37 userLine.length() == 0) {
38
39 break;
40 }
41
42 serverWriter.write(userLine);
43 serverWriter.newLine();
44 serverWriter.flush();
45
46 String serverLine = serverReader.readLine();
47 System.out.println(serverLine);
48 }
49 }
50 finally {
51 sock.close();
52 }
53 }
54 }
55
--------------------------------------------------------------------------------Handling Multiple Clients Concurrently
1 // In file network/ex2/SummerServer.java
2 import java.net.*;
3 import java.io.*;
4 import java.util.StringTokenizer;
5
6 public class SummerServer {
7
8 public static final int PORT = 2000;
9
10 private static class InvalidLongException
11 extends Exception {
12
13 private String message;
14
15 InvalidLongException(String s) {
16 message = s;
17 }
18
19 public String getMessage() {
20 return message;
21 }
22 }
23
24 private static class SummerService
25 extends Thread {
26
27 private Socket sock;
28
29 public SummerService(Socket sock) {
30 this.sock = sock;
31 }
32
33 public void run() {
34
35 try {
36
37 BufferedReader reader =
38 new BufferedReader(
39 new InputStreamReader(
40 sock.getInputStream()));
41
42 BufferedWriter writer =
43 new BufferedWriter(
44 new OutputStreamWriter(
45 sock.getOutputStream()));
46
47 for (;;) {
48
49 String s = reader.readLine();
50
51 if (s == null) {
52 break;
53 }
54
55 String outString;
56 try {
57 outString =
58 Long.toString(sumString(s));
59 }
60 catch(InvalidLongException e) {
61 outString = e.getMessage();
62 }
63 writer.write(outString);
64 writer.newLine();
65 writer.flush();
66 }
67 }
68 catch (IOException e) {
69 }
70 finally {
71 try {
72 sock.close();
73 }
74 catch (IOException e) {
75 }
76 }
77 }
78 }
79
80 public static void main(String[] args)
81 throws IOException {
82
83 ServerSocket listener = new ServerSocket(PORT);
84
85 try {
86
87 for (;;) {
88
89 Socket sock = listener.accept();
90
91 SummerService ss =
92 new SummerService(sock);
93 ss.start();
94 }
95 }
96 finally {
97 listener.close();
98 }
99 }
100
101 private static long sumString(String s)
102 throws InvalidLongException {
103
104 long sum = 0;
105
106 StringTokenizer st = new StringTokenizer(s);
107 String token;
108 while (st.hasMoreTokens()) {
109 token = st.nextToken();
110 try {
111 sum += Long.parseLong(token);
112 }
113 catch (NumberFormatException e) {
114 throw new InvalidLongException(
115 "Invalid number: " + token);
116 }
117 }
118
119 return sum;
120 }
121 }
122 1 // In file network/ex2/SummerClient.java
2 import java.net.*;
3 import java.io.*;
4
5 public class SummerClient {
6
7 public static void main(String[] args)
8 throws IOException {
9
10 InetAddress ia = InetAddress.getByName(null);
11
12 Socket sock = new Socket(ia,
13 SummerServer.PORT);
14
15 try {
16
17 BufferedReader serverReader =
18 new BufferedReader(
19 new InputStreamReader(
20 sock.getInputStream()));
21
22 BufferedWriter serverWriter =
23 new BufferedWriter(
24 new OutputStreamWriter(
25 sock.getOutputStream()));
26
27 LineNumberReader stdinReader =
28 new LineNumberReader(
29 new BufferedReader(
30 new InputStreamReader(
31 System.in)));
32
33 for (;;) {
34
35 String userLine =
36 stdinReader.readLine();
37
38 if (userLine == null ||
39 userLine.length() == 0) {
40
41 break;
42 }
43
44 serverWriter.write(userLine);
45 serverWriter.newLine();
46 serverWriter.flush();
47
48 String serverLine =
49 serverReader.readLine();
50 System.out.println(serverLine);
51 }
52 }
53 finally {
54 sock.close();
55 }
56 }
57 }
58
1 // In file network/ex1/SummerServer.java
2 import java.net.*;
3 import java.io.*;
4 import java.util.StringTokenizer;
5
6 public class SummerServer {
7
8 public static final int PORT = 2000;
9
10 private static class InvalidLongException
11 extends Exception {
12
13 private String message;
14
15 InvalidLongException(String s) {
16 message = s;
17 }
18
19 public String getMessage() {
20 return message;
21 }
22 }
23
24 public static void main(String[] args)
25 throws IOException {
26
27 ServerSocket listener =
28 new ServerSocket(PORT);
29
30 try {
31
32 for (;;) {
33
34 Socket sock = listener.accept();
35
36 try {
37
38 serveClient(sock);
39 }
40 finally {
41 sock.close();
42 }
43 }
44 }
45 finally {
46 listener.close();
47 }
48 }
49
50 private static void serveClient(Socket sock)
51 throws IOException {
52
53 BufferedReader reader = new BufferedReader(
54 new InputStreamReader(
55 sock.getInputStream()));
56
57 BufferedWriter writer = new BufferedWriter(
58 new OutputStreamWriter(
59 sock.getOutputStream()));
60
61 for (;;) {
62
63 String s = reader.readLine();
64
65 if (s == null) {
66 break;
67 }
68
69 String outString;
70 try {
71 outString =
72 Long.toString(sumString(s));
73 }
74 catch(InvalidLongException e) {
75 outString = e.getMessage();
76 }
77 writer.write(outString);
78 writer.newLine();
79 writer.flush();
80 }
81 }
82
83 private static long sumString(String s)
84 throws InvalidLongException {
85
86 long sum = 0;
87
88 StringTokenizer st = new StringTokenizer(s);
89 String token;
90 while (st.hasMoreTokens()) {
91 token = st.nextToken();
92 try {
93 sum += Long.parseLong(token);
94 }
95 catch (NumberFormatException e) {
96 throw new InvalidLongException(
97 "Invalid number: " + token);
98 }
99 }
100
101 return sum;
102 }
103 }
104 1 // In file network/ex1/SummerClient.java
2 import java.net.*;
3 import java.io.*;
4
5 public class SummerClient {
6
7 public static void main(String[] args)
8 throws IOException {
9
10 InetAddress ia = InetAddress.getByName(null);
11
12 Socket sock = new Socket(ia, SummerServer.PORT);
13
14 try {
15
16 BufferedReader serverReader =
17 new BufferedReader(
18 new InputStreamReader(
19 sock.getInputStream()));
20
21 BufferedWriter serverWriter =
22 new BufferedWriter(
23 new OutputStreamWriter(
24 sock.getOutputStream()));
25
26 LineNumberReader stdinReader =
27 new LineNumberReader(
28 new BufferedReader(
29 new InputStreamReader(
30 System.in)));
31
32 for (;;) {
33
34 String userLine = stdinReader.readLine();
35
36 if (userLine == null ||
37 userLine.length() == 0) {
38
39 break;
40 }
41
42 serverWriter.write(userLine);
43 serverWriter.newLine();
44 serverWriter.flush();
45
46 String serverLine = serverReader.readLine();
47 System.out.println(serverLine);
48 }
49 }
50 finally {
51 sock.close();
52 }
53 }
54 }
55
--------------------------------------------------------------------------------Handling Multiple Clients Concurrently
1 // In file network/ex2/SummerServer.java
2 import java.net.*;
3 import java.io.*;
4 import java.util.StringTokenizer;
5
6 public class SummerServer {
7
8 public static final int PORT = 2000;
9
10 private static class InvalidLongException
11 extends Exception {
12
13 private String message;
14
15 InvalidLongException(String s) {
16 message = s;
17 }
18
19 public String getMessage() {
20 return message;
21 }
22 }
23
24 private static class SummerService
25 extends Thread {
26
27 private Socket sock;
28
29 public SummerService(Socket sock) {
30 this.sock = sock;
31 }
32
33 public void run() {
34
35 try {
36
37 BufferedReader reader =
38 new BufferedReader(
39 new InputStreamReader(
40 sock.getInputStream()));
41
42 BufferedWriter writer =
43 new BufferedWriter(
44 new OutputStreamWriter(
45 sock.getOutputStream()));
46
47 for (;;) {
48
49 String s = reader.readLine();
50
51 if (s == null) {
52 break;
53 }
54
55 String outString;
56 try {
57 outString =
58 Long.toString(sumString(s));
59 }
60 catch(InvalidLongException e) {
61 outString = e.getMessage();
62 }
63 writer.write(outString);
64 writer.newLine();
65 writer.flush();
66 }
67 }
68 catch (IOException e) {
69 }
70 finally {
71 try {
72 sock.close();
73 }
74 catch (IOException e) {
75 }
76 }
77 }
78 }
79
80 public static void main(String[] args)
81 throws IOException {
82
83 ServerSocket listener = new ServerSocket(PORT);
84
85 try {
86
87 for (;;) {
88
89 Socket sock = listener.accept();
90
91 SummerService ss =
92 new SummerService(sock);
93 ss.start();
94 }
95 }
96 finally {
97 listener.close();
98 }
99 }
100
101 private static long sumString(String s)
102 throws InvalidLongException {
103
104 long sum = 0;
105
106 StringTokenizer st = new StringTokenizer(s);
107 String token;
108 while (st.hasMoreTokens()) {
109 token = st.nextToken();
110 try {
111 sum += Long.parseLong(token);
112 }
113 catch (NumberFormatException e) {
114 throw new InvalidLongException(
115 "Invalid number: " + token);
116 }
117 }
118
119 return sum;
120 }
121 }
122 1 // In file network/ex2/SummerClient.java
2 import java.net.*;
3 import java.io.*;
4
5 public class SummerClient {
6
7 public static void main(String[] args)
8 throws IOException {
9
10 InetAddress ia = InetAddress.getByName(null);
11
12 Socket sock = new Socket(ia,
13 SummerServer.PORT);
14
15 try {
16
17 BufferedReader serverReader =
18 new BufferedReader(
19 new InputStreamReader(
20 sock.getInputStream()));
21
22 BufferedWriter serverWriter =
23 new BufferedWriter(
24 new OutputStreamWriter(
25 sock.getOutputStream()));
26
27 LineNumberReader stdinReader =
28 new LineNumberReader(
29 new BufferedReader(
30 new InputStreamReader(
31 System.in)));
32
33 for (;;) {
34
35 String userLine =
36 stdinReader.readLine();
37
38 if (userLine == null ||
39 userLine.length() == 0) {
40
41 break;
42 }
43
44 serverWriter.write(userLine);
45 serverWriter.newLine();
46 serverWriter.flush();
47
48 String serverLine =
49 serverReader.readLine();
50 System.out.println(serverLine);
51 }
52 }
53 finally {
54 sock.close();
55 }
56 }
57 }
58
解决方案 »
- swing 页面跳转 下一步怎么显示新页面
- spring的AOP是如何管理事务的?
- J2SE开发怎样使用数据库?新手问题
- 如何查看Oracle数据库的编码方式呢?
- java有时候真的很奇怪,来看看我这代码,想不到是这样的结果
- 缓冲区的疑问
- 请问如何将gif图片转为png和jpeg?谢谢
- 请问:1.WIN2000中如何设置一打开DOS窗口时的路径,如:一打开就是C:\J2SDK\BIN ? 2.在IE中如何设置不让IE缓存?3、如何将IE收藏夹中收藏
- javascript的方法标号规则用javascript的正则表达式是怎么写的。
- 8/(3-8/3)手工算等于24,JAVA程序中算却等于8,怎样使它等于24?
- 如何读取文件中的中文,并显示在Label或TextField中?
- Orion是不是真的完全免费呀?(快来得分!)
但是我不能用readline的
数据生成是通过JDBC从数据库里得到
如取得两个字段name和age
就生成一个串:格式*(以*1开始)name^age*3(以*3结束)
而串里还有中文字符,比如name,在缓冲区里可能有若干个这样的串,如
*1sam^25*3*1路人甲^25*3*1路人乙^25*3.......
IO该怎么处理,谢谢
public class BufferedDBReader extends BufferReader {
BufferedDBReader(InputStreamReader isr){
super(isr);
}
public String readRecordString (){
//根据输入流的格式读取一条记录
}
}然后在以上程序中使用readRecordString()代替readLine()
代码如下:.......17 BufferedDBReader serverReader =
18 new BufferedDBReader(
19 new InputStreamReader(
20 sock.getInputStream()));.......35 String userLine =
36 serverReader.readRecordString();
37
.......