Portál AbcLinuxu, 30. prosince 2025 11:09
#define BUFSIZE 100
#define PORT 5555
int main(int argc, char *argv[])
{
hostent *host; // Vzdálený počítač;
sockaddr_in serverSock; // Vzdálený "konec potrubí"
int mySocket; // Soket
char buf_in[BUFSIZE]; // Přijímací buffer
char buf_out[BUFSIZE]; // Odesilaci buffer
fd_set inputs, testfds;
struct timeval timeout;
// Zjistíme info o vzdáleném počítači
if ((host = gethostbyname(argv[1])) == NULL)
{
printf("Špatná adresa\n");
return -1;
}
// Vytvoříme soket
if ((mySocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) == -1)
{
printf("Nelze vytvořit soket\n");
return -1;
}
// Zaplníme strukturu sockaddr_in
// 1) Rodina protokolů
serverSock.sin_family = AF_INET;
// 2) Číslo portu, ke kterému se připojíme
serverSock.sin_port = htons(PORT);
// 3) Nastavení IP adresy, ke které se připojíme
memcpy(&(serverSock.sin_addr), host->h_addr, host->h_length);
// Připojení soketu
if (connect(mySocket, (sockaddr *)&serverSock, sizeof(serverSock)) == -1)
{
printf("Nelze navázat spojení\n");
return -1;
}
// Odeslání dat
while(1){
fgets(buf_out, BUFSIZE, stdin);
buf_out[strlen(buf_out)-1] = '\0';//odstraneni kone radky
if(strcmp(buf_out,"LOGOUT")!=0){
if (send(mySocket, buf_out, strlen(buf_out), 0) == -1)
{
printf("Problém s odesláním dat\n");
return -1;
}
// Příjem dat
//if((size = recv(mySocket, buf_in, BUFSIZE, 0)) != -1)
//{
// printf("Přijato: [%s]\n");
//}
}
else{
// odhlasime spojeni
close(mySocket);
exit(0);
}
}
printf("Odeslano\n");
return 0;
}
#define BUFSIZE 100
#define PORT 5555
int main(int argc, char *argv[])
{
hostent *host; // Vzdálený počítač;
sockaddr_in serverSock; // Vzdálený "konec potrubí"
int mySocket; // Soket
char buf_in[BUFSIZE]; // Přijímací buffer
char buf_out[BUFSIZE]; // Odesilaci buffer
fd_set read, write;
FD_ZERO(&read);
FD_ZERO(&write);
// Zjistíme info o vzdáleném počítači
if ((host = gethostbyname(argv[1])) == NULL)
{
printf("Špatná adresa\n");
return -1;
}
// Vytvoříme soket
if ((mySocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) == -1)
{
printf("Nelze vytvořit soket\n");
return -1;
}
else{
// Zaplnění množiny sokety
FD_SET(mySocket, &read);
FD_SET(STDIN_FILENO, &read);
}
// Zaplníme strukturu sockaddr_in
// 1) Rodina protokolů
serverSock.sin_family = AF_INET;
// 2) Číslo portu, ke kterému se připojíme
serverSock.sin_port = htons(PORT);
// 3) Nastavení IP adresy, ke které se připojíme
memcpy(&(serverSock.sin_addr), host->h_addr, host->h_length);
// Připojení soketu
if (connect(mySocket, (sockaddr *)&serverSock, sizeof(serverSock)) == -1)
{
printf("Nelze navázat spojení\n");
return -1;
}
// Zavolám select (V Linuxu musím mít nastavenou proměnnou max.)
int ret = select(2, &read, NULL, NULL, NULL);
while(1){
if (ret == -1){
perror("select()");
}
else if(ret){
// odeslam data
if(FD_ISSET(STDIN_FILENO, &read)){
fgets(buf_out, BUFSIZE, stdin);
buf_out[strlen(buf_out)-1] = '\0';//odstraneni kone radky
if(strcmp(buf_out,"LOGOUT")!=0){
if (send(mySocket, buf_out, strlen(buf_out), 0) == -1){
return -1;
}
}
else{
// odhlasime spojeni
close(mySocket);
exit(0);
}
}
//Příjem dat
else if(FD_ISSET(mySocket, &read)){
if(recv(mySocket, buf_in, BUFSIZE, 0) != -1) {
printf("Přijato: [%s]\n");
}
}
}
}
printf("Odeslano\n");
return 0;
}
// Zavolám select (V Linuxu musím mít nastavenou proměnnou max.)Tak si ji nastav... man select, číslo nejvyššího fd plus jedna.
select(STDIN_FILENO>mySocket ? STDIN_FILENO+1 : MySocket+1, ...jinak stdin je nula, takže to bude MySocket+1
... select(FD_SETSIZE, ...
int main(int argc, char *argv[])
{
hostent *host; // Vzdálený počítač;
sockaddr_in serverSock; // Vzdálený "konec potrubí"
int mySocket; // Soket
char buf_in[BUFSIZE]; // Přijímací buffer
char buf_out[BUFSIZE]; // Odesilaci buffer
fd_set read, write;
FD_ZERO(&read);
FD_ZERO(&write);
// Zjistíme info o vzdáleném počítači
if ((host = gethostbyname(argv[1])) == NULL)
{
printf("Špatná adresa\n");
return -1;
}
// Vytvoříme soket
if ((mySocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) == -1)
{
printf("Nelze vytvořit soket\n");
return -1;
}
else{
// Zaplnění množiny sokety
FD_SET(mySocket, &read);
FD_SET(STDIN_FILENO, &read);
}
// Zaplníme strukturu sockaddr_in
// 1) Rodina protokolů
serverSock.sin_family = AF_INET;
// 2) Číslo portu, ke kterému se připojíme
serverSock.sin_port = htons(PORT);
// 3) Nastavení IP adresy, ke které se připojíme
memcpy(&(serverSock.sin_addr), host->h_addr, host->h_length);
// Připojení soketu
if (connect(mySocket, (sockaddr *)&serverSock, sizeof(serverSock)) == -1)
{
printf("Nelze navázat spojení\n");
return -1;
}
while(1){
// Zavolám select (V Linuxu musím mít nastavenou proměnnou max.)
int ret = select(STDIN_FILENO > mySocket ? STDIN_FILENO+1 : mySocket+1, &read, NULL, NULL, NULL);
if (ret == -1){
perror("select()");
}
else if(ret){
// odeslam data
if(FD_ISSET(STDIN_FILENO, &read)){
fgets(buf_out, BUFSIZE, stdin);
buf_out[strlen(buf_out)-1] = '\0';//odstraneni kone radky
if(strcmp(buf_out,"LOGOUT")!=0){
if (send(mySocket, buf_out, strlen(buf_out), 0) == -1){
return -1;
}
}
else{
// odhlasime spojeni
close(mySocket);
exit(0);
}
}
//Příjem dat
else if(FD_ISSET(mySocket, &read)){
if(recv(mySocket, buf_in, BUFSIZE, 0) != -1) {
printf("Přijato: [%s]\n", buf_in);
}
}
}
}
printf("Odeslano\n");
return 0;
}
int main(int argc, char *argv[])
{
hostent *host; // Vzdálený počítač;
sockaddr_in serverSock; // Vzdálený "konec potrubí"
int mySocket; // Soket
char buf_in[BUFSIZE]; // Přijímací buffer
char buf_out[BUFSIZE]; // Odesilaci buffer
fd_set read, write;
FD_ZERO(&read);
FD_ZERO(&write);
// Zjistíme info o vzdáleném počítači
if ((host = gethostbyname(argv[1])) == NULL)
{
printf("Špatná adresa\n");
return -1;
}
// Vytvoříme soket
if ((mySocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) == -1)
{
printf("Nelze vytvořit soket\n");
return -1;
}
else{
// Zaplnění množiny sokety
FD_SET(mySocket, &read);
FD_SET(STDIN_FILENO, &read);
}
// Zaplníme strukturu sockaddr_in
// 1) Rodina protokolů
serverSock.sin_family = AF_INET;
// 2) Číslo portu, ke kterému se připojíme
serverSock.sin_port = htons(PORT);
// 3) Nastavení IP adresy, ke které se připojíme
memcpy(&(serverSock.sin_addr), host->h_addr, host->h_length);
// Připojení soketu
if (connect(mySocket, (sockaddr *)&serverSock, sizeof(serverSock)) == -1)
{
printf("Nelze navázat spojení\n");
return -1;
}
while(1){
// Zavolám select (V Linuxu musím mít nastavenou proměnnou max.)
int ret = select(STDIN_FILENO > mySocket ? STDIN_FILENO+1 : mySocket+1, &read, NULL, NULL, NULL);
if (ret == -1){
perror("select()");
}
else if(ret){
// odeslam data
if(FD_ISSET(STDIN_FILENO, &read)){
fgets(buf_out, BUFSIZE, stdin);
buf_out[strlen(buf_out)-1] = '\0';//odstraneni kone radky
if(strcmp(buf_out,"LOGOUT")!=0){
if (send(mySocket, buf_out, strlen(buf_out), 0) == -1){
return -1;
}
}
else{
// odhlasime spojeni
close(mySocket);
exit(0);
}
}
//Příjem dat
else if(FD_ISSET(mySocket, &read)){
if(recv(mySocket, buf_in, BUFSIZE, 0) != -1) {
printf("Přijato: [%s]\n", buf_in);
}
}
}
}
printf("Odeslano\n");
return 0;
}
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.