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

Uygulama etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
Uygulama etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

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;
}