Bu blog, Linux ağ programlama hakkında temel bilgiler içermektedir.

10 Haziran 2017 Cumartesi

15. Uygulama

Haziran 10, 2017 Posted by Burak Candan No comments
Dinleme Modundaki Server (TCP/IP)
Simple Server (Basit server)
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netdb.h>
const char APRESSMESSAGE[] = "APRESS - Dinleme modu aktif!\n";

int main(int argc, char *argv[]) {
int simpleSocket = 0;
int simplePort = 0;
int returnStatus = 0;
struct sockaddr_in simpleServer;
if (2 != argc) {
fprintf(stderr, "Kullanılan Port: %s <port>\n", argv[0]);
exit(1);
}
simpleSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (simpleSocket == -1) {
fprintf(stderr, "Soket Oluşturulamadı!\n");
exit(1);
}
else {
fprintf(stderr, "Soket oluşturuldu!\n");
}
/* Dinlenen Port Numarası Alınıyor */
simplePort = atoi(argv[1]);
/* adres yapısı kurulumu */
/* komut INADDR_ANY ile tüm lokal adreslere bağlan
*/
bzero(&simpleServer, sizeof(simpleServer));
simpleServer.sin_family = AF_INET;
simpleServer.sin_addr.s_addr = htonl(INADDR_ANY);
simpleServer.sin_port = htons(simplePort);
/*
port ve adreslere soket ile bağlan
*/
returnStatus = bind(simpleSocket,
(struct sockaddr *)&simpleServer,
sizeof(simpleServer));
if (returnStatus == 0) {
fprintf(stderr, "Bağlantı kuruldu!\n");
}
else {
fprintf(stderr, "Adrese bağlanamadı!\n");
close(simpleSocket);
exit(1);
}
/* Soketteki bağlantı sayısını kontrol et
returnStatus = listen(simpleSocket, 5);
if (returnStatus == -1) {
fprintf(stderr, "Sokette dinleme yapılamadı!\n");
close(simpleSocket);
exit(1);
}
while (1)
{
struct sockaddr_in clientName = { 0 };
int simpleChildSocket = 0;
int clientNameLength = sizeof(clientName);
/* wait here */
simpleChildSocket = accept(simpleSocket,
(struct sockaddr *)&clientName,
&clientNameLength);
if (simpleChildSocket == -1) {
fprintf(stderr, "Cannot accept connections!\n");
close(simpleSocket);
exit(1);
}
/* yeni bağlantı isteği yönetimi
*/
/* istemciye mesaj yaz */
write(simpleChildSocket, APRESSMESSAGE, strlen(APRESSMESSAGE));
close(simpleChildSocket);
}
close(simpleSocket);
return 0;
}

Basit bir UDP Server Yapısı

#include <sys/types.h>
#include <sys/socket.h>
#include <netdb.h>
#include <string.h>
#include <stdio.h>

#define MAXBUF 1024
/*Maksimum ara bellek boyutunu tanımladık*/

int main(int argc, char* argv[])
{
int udpSocket;
int returnStatus = 0;
int addrlen = 0;
struct sockaddr_in udpServer, udpClient;
char buf[MAXBUF];
/* Doğru portta olup olmadığımızı kontrol edelim*/
if (argc < 2)
{
fprintf(stderr, "Kullanılan Port: %s <port>\n", argv[0]);
exit(1);
}


/* soket oluşturulması */
udpSocket = socket(AF_INET, SOCK_DGRAM, 0);
if (udpSocket == -1)
{
fprintf(stderr, "Soket oluşturulamadı!\n");
exit(1);
}
else {
printf("Soket oluşturuldu.\n");
}

/* Server ve adres kurulumu */

/*  INADDR_ANY ile lokal adreslere bağlanma */
udpServer.sin_family = AF_INET;
udpServer.sin_addr.s_addr = htonl(INADDR_ANY);
/* argüman olarak port kullanımı */
udpServer.sin_port = htons(atoi(argv[1]));

/* bind to the socket */
returnStatus = bind(udpSocket, (struct sockaddr*)&udpServer,
sizeof(udpServer));
if (returnStatus == 0) {
fprintf(stderr, "Bağlantı tamamlandı!\n");
}
else {
fprintf(stderr, "Adrese bağlanılamadı!\n");
close(udpSocket);
exit(1);
}

while (1)
{
addrlen = sizeof(udpClient);
returnStatus = recvfrom(udpSocket, buf, MAXBUF, 0,
(struct sockaddr*)&udpClient, &addrlen);

if (returnStatus == -1) {
fprintf(stderr, "Mesaj ulaşmadı!\n");
}
else {
printf("Alındı: %s\n", buf);
/* mesaj alındığı için onay gönder */
strcpy(buf, "OK");
returnStatus = sendto(udpSocket, buf, strlen(buf)+1, 0,
(struct sockaddr*)&udpClient,
sizeof(udpClient));
if (returnStatus == -1) {
fprintf(stderr, "Onay gönderilemedi!\n");
}
else {
printf("Onay Gönderildi.\n");
}
/*Temizlik zamanı */
close(udpSocket);
return 0;
}



0 yorum:

Yorum Gönder