0 / 0 / 2
Регистрация: 04.04.2015
Сообщений: 7
1

UDP Клиент-Сервер

19.03.2016, 21:55. Показов 4486. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте!
Написала два приложения: клиент и сервер. Обработала, чтобы клиент мог отправлять данные несколько раз. Вопрос: как написать выход, если будут посылаться буквенные символы? Подскажите, пожалуйста!)

Клиент:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
import java.io.IOException;
import java.net.*;
import java.util.Scanner;
public class Client {
public static void main(String[] args) throws IOException {
//DatagramSocket st=new DatagramSocket(12346);
//DatagramPacket dp = null;
//InetAddress loc=InetAddress.getByName("localhost");
boolean flag=true;
while (flag) {
    try{
        DatagramSocket st=new DatagramSocket(12346);
DatagramPacket dp = null;
InetAddress loc=InetAddress.getByName("localhost");
byte [] buf=new byte[100];
Scanner in = new Scanner(System.in);
int arr[] = new int [3];
for (int i = 0; i < arr.length; i++)
{
System.out.print("Введите элемент arr["+ i +"]:");
int k=System.in.read(buf);
dp=new DatagramPacket(buf, k, loc,12345 );
st.send(dp);
}
dp=new DatagramPacket(buf,100);
st.receive(dp);
System.out.println("the answer is "+new String(dp.getData()));
 
st.close();
}
      catch(Exception e)
      {
        System.out.println(e.getMessage());
        break;
      }
            
}
}
}
Cервер:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
import java.io.IOException;
import java.net.*;
public  class Servermain 
{
public static void main(String[] args) throws IOException, InterruptedException {
        new Servermain();
    }
    double sum1=0,sum2=0;
    DatagramSocket st;
    byte [] buf=new byte[100];
    DatagramPacket dp=new DatagramPacket(buf,100);
    
    Servermain()throws IOException, InterruptedException{
        st=new DatagramSocket(12345);
        listen();
    }
    
    private void listen() throws IOException, InterruptedException
    {
            boolean flag=true;
            while (true) {
                try{
        int a,b,c;
        st.receive(dp);
        String str=new String(dp.getData()); 
        str=str.substring(0, str.indexOf('\n'));
        System.out.println("number "+str+" recieved as a");
        a=Integer.parseInt(str);
        st.receive(dp);
        str=new String(dp.getData());
        str=str.substring(0, str.indexOf('\n'));
        System.out.println("number "+str+" recieved as b");
        b=Integer.parseInt(str);
        st.receive(dp);
        str=new String(dp.getData());
        str=str.substring(0, str.indexOf('\n'));
        System.out.println("number "+str+" recieved as c");
        c=Integer.parseInt(str);                     
    Thread t1=new Thread(new Runnable()
        {
            public void run()
            {
                                for(int i=a;i<b;i++)
                {
                    sum1+=3*i/(2*i+1);
                }
            }
        })
        ,t2=new Thread(new Runnable()
        {
            public void run()
            {
                for(int i=b;i<c;i++)
                {
                    sum1+=i*i+4*i+1;
                }
            }
        });
               
                t1.start();
        t2.start();
        t1.join();
        t2.join();
    //  sendBack();
                
                String stri=String.valueOf(sum1+sum2);
        byte [] send=stri.getBytes();
        dp=new DatagramPacket(send, send.length, InetAddress.getByName("localhost"),12346 );
        st.send(dp);
        sum1=0;
                sum2=0;
                }
                catch(Exception e)
      {
        System.out.println(e.getMessage());
        break;
      }
                
           }st.close();
        }
        
//  private void sendBack() throws IOException
//  {
//      String str=String.valueOf(sum1+sum2);
//      byte [] send=str.getBytes();
//      dp=new DatagramPacket(send, send.length, InetAddress.getByName("localhost"),12346 );
//      st.send(dp);
//      
//  }
 
}
Благодарю заранее, кто подскажет)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.03.2016, 21:55
Ответы с готовыми решениями:

UDP Клиент-Сервер
На этот раз мне надо реализовать клиент-серверное приложение использую UDP. В интернете прочитал,...

UDP клиент
Имеется промышленная материнская плата, в которой реализована прошивка для UDP сервера, пишу клиент...

Разработка клиент-серверных приложений с использованием UDP соединений
Добрый день, подскажите пожалуйста куда в Java правильно запихнуть код. Заранее спасибо . СЕРВЕР:...

UDP Клиент Сервер
Есть простой UDP клиент и UDP эхо-сервер. Вот исходники: Сервер: #include &quot;stdafx.h&quot;...

2
0 / 0 / 2
Регистрация: 04.04.2015
Сообщений: 7
27.03.2016, 14:00  [ТС] 2
Попробовала изменить сервер следующим образом:


#define _WINSOCK_DEPRECATED_NO_WARNINGS
#define _CRT_SECURE_NO_WARNINGS
#include <iostream> // потоки ввода-вывода
#include <winsock2.h> // работа с сокетами
using namespace std;
#pragma comment(lib, "Ws2_32.lib")

bool is_vowel(char ch) // проверка, является ли символ гласным
{
int i, l;
char vowels[] = "AаЕеЁёИиОоУуЫыЭэЮюЯя"; // массив гласных
l = strlen(vowels);
for (i = 0; i < l; i++) // перебор массива
{ if (ch == vowels[i]) break; } // проверка символа
return (i != l);
}

void main()
{
WORD wVersionRequested;
WSADATA wsaData;
SOCKET s;
sockaddr_in addr;
int err, size;
char b1[8], b2[100];
b2[0]='\0'; b2[1]='\0'; b2[2]='\0';
b2[3]='\0'; b2[4]='\0'; b2[5]='\0';
b2[6]='\0'; b2[7]='\0'; b2[8]='\0';
int i, k, n, v1, v2, s1, s2;
int j=0;
wVersionRequested = MAKEWORD(2, 2); // максимальный номер версии
err = WSAStartup(wVersionRequested, &wsaData); // инициализация WinSock DLL
if (err != 0) return; // если ошибка - завершение работы
addr.sin_family = AF_INET; // тип адреса
addr.sin_port = htons(1024); // номер порта
addr.sin_addr.s_addr = inet_addr("127.0.0.1"); // IP-адрес сервера
s = socket(AF_INET, SOCK_DGRAM, 0); // создание сокета потока, протокол UDP
bind(s, (sockaddr*) &addr, sizeof(addr)); // связывание сокета с локальным адресом
//while (true) // вечный цикл обработки
//{
size = sizeof(addr);

recvfrom(s, b1, sizeof(b1), 0, (sockaddr*) &addr, &size); // приём строки
for (int m=0; m<sizeof(b1)-1; m++) {
b2[j]=b1[m];
j++;
b2[j]='\0';
}

n = strlen(b1); // длина принятой строки
for (v1 = 0; v1 < n; v1++)
{ if (is_vowel(b1[v1])) break; } // ищем первую гласную
if (v1 == n) strcpy(b2, b1); // нет гласных - копируем слово целиком
else // есть гласные - разбиваем на слоги
{
k = s1 = s2 = 0;
while (s1 < n) // пока не достигнут конец слова
{
for (v2 = (v1 + 1); v2 < n; v2++)
{ if (is_vowel(b1[v2])) break; } // ищем следующую гласную
if (v2 == n) s2 = n; // не осталось гласных - последний слог
else
{
if ((v2 - v1) > 2) s2 = v1 + 1; // 2 согласных, закрытый слог
else s2 = v1; // открытый слог
}
for (i = s1; i <= s2; i++) b2[k++] = b1[i]; // копируем текущий слог
if (s2 != n) b2[k++] = '-'; // если не конец слова - добавляем дефис
s1 = s2 + 1; v1 = v2; // переход к следующему слогу
}
}
sendto(s, b2, sizeof(b2), 0, (sockaddr*) &addr, size); // отправка ответа
//}
closesocket(s); // закрытие сокета
WSACleanup(); // прекращение работы с WinSock DLL
}


Выводит после 8 элементов странные знаки. Почему? Что не так в коде?
Миниатюры
UDP Клиент-Сервер  
0
90 / 89 / 23
Регистрация: 08.07.2014
Сообщений: 548
01.04.2016, 08:36 3
В первом сообщении у вас сервер вроде-как на Java, во втором - уже на C++ если не ошибаюсь. Это прикол такой ?
0
01.04.2016, 08:36
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.04.2016, 08:36
Помогаю со студенческими работами здесь

UDP клиент сервер
Помогите пожалуйста сделать &quot;Получение по запросу имени компьютера, физического адреса,...

Простой клиент-сервер UDP
Всем добрый вечер! Для осознания, почему контроллер не связывается с компьютером, решил...

Клиент-Сервер на UDP. Работающий
Всем привет, я в C# недавно. Есть готовый клиент сервер на ЮДП. Отправляет только одно сообщение...

UDP клиент-сервер. Пакет
Доброго времени, ребят! Возникла проблема. В универе дали задание в довольно ИНФОРМАТИВНОМ виде......


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru