|
Прохожу курс "Построение распределенных систем на Java" в третьей лекции где описывается TCPServer вылетает эта ошибка
"Connection cannot be resolved to a type" Java version 1.7.0_05 |
Пример использования API java.net
1 package com.asw.net.ex1;
2 import java.io.*;
3
4 public class BillingClientService extends Thread {
5 DataInputStream dis;
6 DataOutputStream dos;
7 BillingService bs;
8
9 public BillingClientService (BillingService bs,DataInputStream dis,DataOutputStream dos){
10 this.bs = bs;
11 this.dis = dis;
12 this.dos = dos;
13 }
14
15 public void run(){
16 System.out.println("ClientService thread started");
17 boolean work = true;
18 while (work) {
19 int command;
20 try {
21 command = dis.readInt();
22 switch (command) {
23 case BillingService.ADD_NEW_CARD:
24 addNewCard();
25 break;
26 case BillingService.ADD_MONEY:
27 addMoney();
28 break;
29 case BillingService.SUB_MONEY:
30 subMoney();
31 break;
32 case BillingService.GET_CARD_BALANCE:
33 getCardBalance();
34 break;
35 case BillingService.EXIT_CLIENT:
36 work = false;
37 break;
38 default:
39 System.out.println("Bad operation:" + command);
40 }
41 } catch (IOException e) {
42 e.printStackTrace();
43 }
44 }
45 }
46
47 void addNewCard() throws IOException{
48 String personName = dis.readUTF();
49 String card = dis.readUTF();
50 bs.addNewCard(personName,card);
51 }
52 void addMoney() throws IOException{
53 String card = dis.readUTF();
54 double money = dis.readDouble();
55 bs.addMoney(card,money);
56 }
57 void subMoney() throws IOException{
58 String card = dis.readUTF();
59 double money = dis.readDouble();
60 bs.subMoney(card,money);
61 }
62 void getCardBalance() throws IOException{
63 String card = dis.readUTF();
64 double money = bs.getCardBalance(card);
65 dos.writeDouble(money);
66 }
67 }
Листинг
4.2.
Класс BillingClientService
Класс BillingClient
Что касается клиентского приложения, то в данном случае оно устроено очень просто. Сетевое имя сервера оно принимает в качестве аргумента командной строки, порт известен заранее. Первое, что делается, - устанавливается соединение с сервером (метод connectToServer).Затем создаются три новые карты с разными идентификаторами. Создаются они с помощью метода sendNewCardOperation,который действует в соответствии с установленными нами протоколом: он записывает в поток сначала код операции, затем имя владельца карты, затем его идентификатор.
После создания карт в цикле выполняется метод sendAddMoneyOperation,который посылает серверу команды об увеличении баланса для только что добавленных карт. Цикл выполняется 1000 раз, поэтому средств на каждой из карт в итоге оказывается много.
С помощью вызовов sendGetCardBalanceOperation в качестве параметра которого передается идентификатор карты, мы можем в этом убедиться.
Все реализованные в клиентском приложении методы: send NewCardOperation, sendAddMoneyOperation, sendSubMoneyOperation, sendGetCardBalanceOperation, closeConnection - "симметричны" соответствующим методам BillingClientService и неукоснительно соблюдают разработанный протокол.
1 package com.asw.net.ex1;
2 import java.net.*;
3 import java.io.*;
4
5 public class BillingClient {
6 int serverPort = 7896;
7 String serverName;
8 Socket s;
9 DataInputStream dis;
10 DataOutputStream dos;
11
12 public BillingClient(String serverName){
13 this.serverName = serverName;
14 }
15
16 public static void main(String[] args) {
17 BillingClient bc = new BillingClient(args[0]);
18 try {
19 bc.startTest();
20 } catch (IOException e) {
21 e.printStackTrace();
22 }
23 }
24
25 public void startTest() throws IOException{
26 connectToServer();
27 sendNewCardOperation("Piter","1");
28 sendNewCardOperation("Stefan","2");
29 sendNewCardOperation("Nataly","3");
30 for (int i=0; i<1000;i++){
31 sendAddMoneyOperation("1", i%10);
32 sendAddMoneyOperation("2", i%20);
33 sendAddMoneyOperation("3", i%30);
34 }
35 System.out.println("1:"+sendGetCardBalanceOperation("1"));
36 System.out.println("2:"+sendGetCardBalanceOperation("2"));
37 System.out.println("3:"+sendGetCardBalanceOperation("3"));
38 closeConnection();
39 }
40
41 void connectToServer() throws UnknownHostException, IOException{
42 s = new Socket(serverName, serverPort);
43 dis = new DataInputStream(s.getInputStream());
44 dos = new DataOutputStream(s.getOutputStream());
45 }
46
47 void sendNewCardOperation(String personName, String card) throws IOException{
48 dos.writeInt(BillingService.ADD_NEW_CARD);
49 dos.writeUTF(personName);
50 dos.writeUTF(card);
51 }
52
53 void sendAddMoneyOperation(String card, double money) throws IOException{
54 dos.writeInt(BillingService.ADD_MONEY);
55 dos.writeUTF(card);
56 dos.writeDouble(money);
57 }
58 void sendSubMoneyOperation(String card, double money) throws IOException{
59 dos.writeInt(BillingService.SUB_MONEY);
60 dos.writeUTF(card);
61 dos.writeDouble(money);
62 }
63 double sendGetCardBalanceOperation(String card) throws IOException{
64 dos.writeInt(BillingService.GET_CARD_BALANCE);
65 dos.writeUTF(card);
66 return dis.readDouble();
67 }
68 void closeConnection() throws IOException{
69 dos.writeInt(BillingService.EXIT_CLIENT);
70 }
71 }
Листинг
4.3.
Класс BillingClient