Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.94/48: Рейтинг темы: голосов - 48, средняя оценка - 4.94
 Аватар для dr.curse
404 / 360 / 36
Регистрация: 11.10.2010
Сообщений: 1,907

Сокеты

04.08.2011, 15:55. Показов 8892. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Написал простой TCP клинет
C
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
#include <winsock2.h>
#include <stdio.h>
int main(void)
{
    WORD v=MAKEWORD(2,0);
    WSADATA d;
    int e=WSAStartup(v,&d);
    if (e)
    {
        perror("error initializing winsock");
        return 1;
    }
    struct sockaddr_in peer;
    int s;
    int rc;
    char buf[1];
    peer.sin_family=AF_INET;
    peer.sin_port=htons(7500);
    peer.sin_addr.s_addr=inet_addr("127.0.0.1");
    s=socket(AF_INET,SOCK_STREAM,0);
    if (s<0)
    {
        perror("error calling socket");
        return 1;
    }
    rc=connect(s,(struct sockaddr *)&peer,sizeof(peer));
    if (rc)
    {
        perror("error calling connect");
        return 1;
    }
    rc=send(s,"1",1,0);
    if (rc<=0)
    {
        perror("error calling send");
        return 1;
    }
    rc=recv(s,buf,1,0);
    if (recv<=0)
        perror("error calling recv");
    else
        printf("%c\n",buf[0]);
    return 0;
}
и TCP сервер
C
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
#include <winsock2.h>
#include <stdio.h>
int main(void)
{
    WORD v=MAKEWORD(2,0);
    WSADATA d;
    int e=WSAStartup(v,&d);
    if (e)
    {
        perror("error initializing winsock");
        return 1;
    }
    struct sockaddr_in local;
    int s;
    int s1;
    int rc;
    char buf[1];
    local.sin_family=AF_INET;
    local.sin_port=htons(7500);
    local.sin_addr.s_addr=htonl(INADDR_ANY);
    s=socket(AF_INET,SOCK_STREAM,0);
    if (s<0)
    {
        perror("error calling socket");
        return 1;
    }
    rc=bind(s,(struct sockaddr *)&local,sizeof(local));
    if (rc<0)
    {
        perror("error calling bind");
        return 1;
    }
    rc=listen(s,5);
    if (rc)
    {
        perror("error calling listen");
        return 1;
    }
    s1=accept(s,NULL,NULL);
    if (s1<0)
    {
        perror("error calling accept");
        return 1;
    }
    rc=recv(s1,buf,1,0);
    if (rc<=0)
    {
        perror("error calling recv");
        return 1;
    }
    printf("%c\n",buf[0]);
    rc=send(s1,"2",1,0);
    if (rc<=0)
        perror("error calling send");
    return 0;
}
в первый раз когда запустил было все нормально клиент выводил 2 а сервер 1. Но во второй раз сервер вывел 1 а клиент нечего. Как это можно исправить?

Добавлено через 1 час 18 минут
Исправил, оказывается забыл закрыть сокеты. Если кому надо вот исправленные клиент и сервер.
клинет
C
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
#include <winsock2.h>
#include <stdio.h>
int main(void)
{
    WORD v=MAKEWORD(2,0);
    WSADATA d;
    int e=WSAStartup(v,&d);
    if (e)
    {
        perror("error initializing winsock");
        return 1;
    }
    struct sockaddr_in peer;
    int s;
    int rc;
    char buf[1];
    peer.sin_family=AF_INET;
    peer.sin_port=htons(7500);
    peer.sin_addr.s_addr=inet_addr("127.0.0.1");
    s=socket(AF_INET,SOCK_STREAM,0);
    if (s<0)
    {
        perror("error calling socket");
        return 1;
    }
    rc=connect(s,(struct sockaddr *)&peer,sizeof(peer));
    if (rc)
    {
        perror("error calling connect");
        return 1;
    }
    rc=send(s,"1",1,0);
    if (rc<=0)
    {
        perror("error calling send");
        return 1;
    }
    rc=recv(s,buf,1,0);
    if (recv<=0)
        perror("error calling recv");
    else
        printf("%c\n",buf[0]);
    if (closesocket(s))
        perror("error calling closesocket");
    WSACleanup();
    return 0;
}
сервер
C
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
#include <winsock2.h>
#include <stdio.h>
int main(void)
{
    WORD v=MAKEWORD(2,0);
    WSADATA d;
    int e=WSAStartup(v,&d);
    if (e)
    {
        perror("error initializing winsock");
        return 1;
    }
    struct sockaddr_in local;
    int s;
    int s1;
    int rc;
    char buf[1];
    local.sin_family=AF_INET;
    local.sin_port=htons(7500);
    local.sin_addr.s_addr=htonl(INADDR_ANY);
    s=socket(AF_INET,SOCK_STREAM,0);
    if (s<0)
    {
        perror("error calling socket");
        return 1;
    }
    rc=bind(s,(struct sockaddr *)&local,sizeof(local));
    if (rc<0)
    {
        perror("error calling bind");
        return 1;
    }
    rc=listen(s,5);
    if (rc)
    {
        perror("error calling listen");
        return 1;
    }
    s1=accept(s,NULL,NULL);
    if (s1<0)
    {
        perror("error calling accept");
        return 1;
    }
    rc=recv(s1,buf,1,0);
    if (rc<=0)
    {
        perror("error calling recv");
        return 1;
    }
    printf("%c\n",buf[0]);
    rc=send(s1,"2",1,0);
    if (rc<=0)
        perror("error calling send");
    if (closesocket(s))
        perror("error calling closesocket");
    if (closesocket(s1))
        perror("error calling closesocket");
    WSACleanup();
    return 0;
}
8
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
04.08.2011, 15:55
Ответы с готовыми решениями:

Сокеты в VC++ 2008
Привет всем. Я делаю клиент и сервер. Делаю по книге : Снейдер Й. - Эффективное программирование TCP-IP. Там есть типа заготовки на...

Кейлогер и сокеты
Здравствуйте, дорогие форумчане! Вопрос у меня образовался. Код данный кейлогером мной написанным является, и шлет он данные перехваченные...

хоть убейте а опять сокеты
ришу прогу раз десятый (раньше всё работало но вот раслабил мозг на пару дней) тут при подключении exploera или fireFox по любому ip...

5
 Аватар для vendeme
32 / 4 / 0
Регистрация: 22.06.2011
Сообщений: 88
07.10.2011, 05:57
Спасибо.
Давно искал вот такой рабочий примерчик.
Скрипты из "Самоучитель игры на WINSOCK" и "Пример работы ТСР-сервера" не рабочие.
Первая не отсылает строку обратно и ещё с синт-ошибками, а у вторая не полная. (отсутствует main у для сервера)
0
290 / 193 / 23
Регистрация: 03.08.2011
Сообщений: 2,824
Записей в блоге: 12
22.10.2011, 15:37
vendeme,
всё там рабочие либо вы невнимательный либо вы нашли гавнёвую статью вот код key loger для сервака если ищешь классный исходник
C++
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
#include "string.h"
#define Q (sockaddr*)
#define W send(((SOCKET*)cs)[0],str,strlen(str),0);
DWORD WINAPI CLIENT(LPVOID cs);
DWORD WINAPI CONEKT(LPVOID ss);
 
int main()
{
    WSADATA wsa;
    WSAStartup(0x202,&wsa);
    int n;
    SOCKET s;
    sockaddr_in ss;
    s=socket(AF_INET,SOCK_STREAM,0);
    ss.sin_family=AF_INET;
    ss.sin_port=htons(666);
    ss.sin_addr.s_addr=0;
    bind(s,Q &ss,sizeof(ss));
    listen(s,5);
    DWORD thID;
    CreateThread(0,0,CONEKT,&s,0,&thID);
label:
    system("pause");
    goto label;
        return 0;   
}
 
DWORD WINAPI CONEKT(LPVOID ss)
{
DWORD thID;
SOCKET cs;
sockaddr_in css_in;
int size_css_in=sizeof(css_in);
while((cs=accept(((SOCKET*)ss)[0],Q &css_in,&size_css_in)))
    CreateThread(0,0,CLIENT,&cs,0,&thID);}  
 
 
DWORD WINAPI CLIENT(LPVOID cs)
{
char str=0;
SOCKET s=((SOCKET*)cs)[0];
timeval tim;
fd_set rv;
tim.tv_sec=0;
tim.tv_usec=100;
FD_ZERO(&rv);
FD_SET(s,&rv);
select(s,&rv,0,0,0);
for(;;)
{
      if(FD_ISSET(s,&rv))
      {
       recv(s,&str,1,0);
       printf("%c",str);
    }
}
return 0;   
}
Добавлено через 1 минуту
клиент конечно же не покажу а то получится что я на половину вирь написал
0
funt_1
13.10.2012, 23:18
извините за глупый вопрос...
а как можно проверить работу клиента и сервера?
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
13.10.2012, 23:45
Цитата Сообщение от Van111 Посмотреть сообщение
классный исходник
Если это классный исходник то я Принц Уэльский.
1
0 / 0 / 0
Регистрация: 17.11.2012
Сообщений: 3
18.10.2013, 02:28
есть вопрос, при какой локально сети нужно проверять работу программ, например : у меня локальная сеть через connecctify и когда я пытаюсь проверить работоспособность кода, описанного выше, ничего не получается, ошибка подключения к серверу(он его просто не видит)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
18.10.2013, 02:28
Помогаю со студенческими работами здесь

Ищу учебник по Си и Сокетам в Си, в обычном учебнике по Си будет раздел "сокеты"?
Ищу учебник по Си и с Сокетам в Си, в обычном учебнике по Си будет раздел &quot;сокеты&quot;? Т.е. искать учебник по Си с разделом о работе с...

Php сокеты и unix-сокеты
Здравствуйте, есть программа, написанная на С под Linux. При её работе в памяти хранятся несколько массивов, которые необходимо обработать...

Сокеты
Здравствуйте, Скиньте ссылку на хороший ОНЛАЙН справочник и/или учебник по сокетам в переле где понятно обьясняеться КАК КЛИЕНТ так И...

СОКЕТЫ
Привет! Вопрос, возможно, не в ту тему. Мне хочется автоматизировать процесс отправки постов в мой блог. Т.е. делать это не вручную через...

Сокеты
Как с помощью сокетов послать сообщение на другой компьютер не входящий в есть .. то есть он находиться в глоб. сети ? я думал всё...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 11.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru