Интернет магазин китайских планшетных компьютеров |
|
Компьютеры - Сокеты Беркли - Пример клиента и сервера, использующих TCP23 января 2011Оглавление: 1. Сокеты Беркли 2. Интерфейс сокета Беркли 3. Заголовочные файлы 4. Функции 5. Дополнительные параметры для сокетов 6. Передача данных 7. Пример клиента и сервера, использующих TCP 8. Пример клиента и сервера, использующие UDP TCP реализует концепцию соединения. Процесс создает TCP-сокет вызовом функции СерверСоздание простейшего TCP-сервера состоит из следующих шагов:
/* Код сервера на языке Си */
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
int main
{
struct sockaddr_in stSockAddr;
int i32SocketFD = socket;
if
{
perror;
exit;
}
memset );
stSockAddr.sin_family = PF_INET;
stSockAddr.sin_port = htons;
stSockAddr.sin_addr.s_addr = INADDR_ANY;
if (
bind(
i32SocketFD,
&stSockAddr, /* зачем приведение типа?: нужно, но а не void */
sizeof
) == -1
)
{
perror;
CloseSocketAndExitWithFailure:
close;
exit;
}
if == -1 )
{
perror;
goto CloseSocketAndExitWithFailure;
}
for
{
int i32ConnectFD = accept;
if
{
perror;
close; /* нужно ли закрывать сокет после ошибки? */
goto CloseSocketAndExitWithFailure;
}
/* выполнение операций чтения и записи ... */
shutdown;
close;
}
return 0;
}
КлиентСоздание TCP-клиента происходит следующим образом:
/* Код клиента на языке Си */
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
int main
{
struct sockaddr_in stSockAddr;
int i32Res;
int i32SocketFD = socket;
if
{
perror;
exit;
}
memset );
stSockAddr.sin_family = PF_INET;
stSockAddr.sin_port = htons;
i32Res = inet_pton;
if
{
perror;
CloseSocketAndExitWithFailure:
close;
exit;
}
else
if
{
perror;
goto CloseSocketAndExitWithFailure;
}
if (
connect(
i32SocketFD,
&stSockAddr, /* зачем приведение типа? */
sizeof
) == -1
)
{
perror;
goto CloseSocketAndExitWithFailure;
}
/* выполнение операций чтения и записи ... */
shutdown;
close;
return 0;
}
Просмотров: 9683
|