Прохожу курс "Построение распределенных систем на 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