Archive

Archive for the ‘Programlama’ Category

UDP Broadcast sunucu – istemci

August 3rd, 2012 No comments

Sunucu:

#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#define MY_PORT 3333
int main(int argc, char *argv[])
{
int sockfd, new_fd;
struct sockaddr_in my_addr; // hedef adres
struct sockaddr_in their_addr; // baglanti yapan adres
int sin_size, rt;
// gelen verinin tutuldugu buffer
char buf[32];
// islem yapmak icin gerekli dosya gosterici
sockfd = socket(AF_INET, SOCK_DGRAM, 0);
sin_size = sizeof(struct sockaddr_in);
// adres ile ilgili ayarlar
my_addr.sin_family = AF_INET;
my_addr.sin_port = htons(MY_PORT); // kullanilacak port
my_addr.sin_addr.s_addr = INADDR_ANY; // mevcut ip adresi
memset(&(my_addr.sin_zero), 0, 8); // geri kalani 0la
// socket ile dosyayi iliskilendir
bind(sockfd, (struct sockaddr *)&my_addr, sizeof(struct sockaddr));
while ( 1 ) {
rt = recvfrom (sockfd, buf, 12, 0, (struct sockaddr *)&their_addr, &sin_size);
if (rt > 0) {
printf ("recv: %s\n", buf);
} else if (rt < 0) {
printf("Baglanti koptu\n");
break;
}
}
close(sockfd);
return 0;
}

İstemci:

#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#define DEST_IP "255.255.255.255"
#define DEST_PORT 3333
int main(int argc, char *argv[])
{
int sockfd, new_fd;
struct sockaddr_in dest_addr; // hedef adres
int sin_size, rt;
sin_size = sizeof(struct sockaddr_in);
// islem yapmak icin gerekli dosya gosterici
sockfd = socket(AF_INET, SOCK_DGRAM, 0);
// adres ile ilgili ayarlar
dest_addr.sin_family = AF_INET;
dest_addr.sin_port = htons(DEST_PORT);
dest_addr.sin_addr.s_addr = inet_addr(DEST_IP);
memset(&(dest_addr.sin_zero), 0, 8); // geri kalani 0 la
// Broadcast icin gerekli yetkiyi al
int flag = 1;
if (setsockopt (sockfd, SOL_SOCKET, SO_BROADCAST, &flag, sizeof(flag)) < 0)
perror("setsockopt");
// mesaji gonder
rt = sendto (sockfd, "slm asl plz", 12, 0, (const struct sockaddr *)&dest_addr, sin_size);
if ( rt < 0 )
perror("Hata: ");
// socketi kapat
close(sockfd);
return 0;
}

Var olan bir SVN deposunun adresini değiştirme

April 9th, 2012 No comments

Herhangi bir nedenle üzerinde çalıştığınız svn deposunun adresi değişirse aşağıdaki komutla gerekli değişikliği yapabilirsiniz.

svn switch --relocate http://svn.example.com/path/to/repository/path/within/repository http://svnnew.example.com/new/repository/path/within/repository

Linux, Paralel Port ile 2×16 LCD Ekran Kullanımı

February 27th, 2011 No comments

Çalıştığım projede linuxta paralel port ile lcd ekran kullanmam gerekti. Neredeyse internetin altını üstüne getirdim ama işime yarar çok birşey bulamadım. Sonunda DOS için yazılmış bir kod buldum. Bu kodu biraz inceleyip, gerekli püf noktaları bulunca kodu linux’a uydurmak çok zor olmadı. Hatta neredeyse sadece kullanılan fonksiyonun adını ve parametre yerlerini değiştirdim 🙂

Aslında olay çok basitmiş, lcd ekrandan çıkan 14 bacaktan, 8tanesini data ve komut göndermek için kullanıyoruz. 1 bacak enable, 1 set – reset seçimi için, 1 bacakta read/write seçimi için kullanılıyor. Geri kalan 3 bacak güç bağlantısı ve kontrast için kullanılıyor. Burdaki şemaya göre bağlantıları yapabilirsiniz. Ayrıca örnek aldığım kodda aynı sayfada bulunmakta.

Yorum satırları pek çok şeyi açıklıyor. Ama birkaç noktaya değinmekte fayda var. Data bacaklarına gerekli inputları verdikten sonra, enable bacağını 1’den 0’a düşürerek lcd’nin data bacaklarında sinyali alıp işleme sokmasını sağlıyoruz. init array’i içinde lcd’nin temizlenmesi ve çalışmaya uygun hale gelmesi için gerekli komutlar tutuluyor. 0x378 paralel portun adresi.

#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <asm/io.h>
#define PORTADDRESS 0x378 /* Enter Your Port Address Here */
#define DATA PORTADDRESS+0
#define STATUS PORTADDRESS+1
#define CONTROL PORTADDRESS+2
int main()
{
if (ioperm(DATA , 3, 1)) {perror("ioperm"); exit(1);}
char string[] = {"Testing 1,2,3 "
"It' Works ! "};
char init[10];
int count;
int len;
init[0] = 0x0F; /* Init Display */
init[1] = 0x01; /* Clear Display */
init[2] = 0x38; /* Dual Line / 8 Bits */
outb(inb(CONTROL) & 0xDF, CONTROL); /* Reset Control Port - Make sure Forward Direction */
outb(inb(CONTROL) | 0x08, CONTROL); /* Set Select Printer (Register Select) */
for (count = 0; count < = 2; count++)
{
outb(init[count], DATA);
outb(inb(CONTROL) | 0x01, CONTROL); /* Set Strobe (Enable)*/
usleep(20); /* Larger Delay for INIT */
outb(inb(CONTROL) & 0xFE, CONTROL); /* Reset Strobe (Enable)*/
usleep(20); /* Larger Delay for INIT */
}
outb(inb(CONTROL) & 0xF7, CONTROL); /* Reset Select Printer (Register Select) */
len = strlen(string);
for (count = 0; count < len; count++)
{
outb(string[count], DATA);
outb(inb(CONTROL) | 0x01, CONTROL); /* Set Strobe */
usleep(2);
outb(inb(CONTROL) & 0xFE, CONTROL); /* Reset Strobe */
usleep(2);
}
return 0;
}
view raw lcd.c hosted with ❤ by GitHub

Linke birşey olması durumunda bu adresten gerekli şemayı indirebilirsiniz.

Java ile server socket yapımı

December 11th, 2010 No comments

Bir proje için server sockete ihtiyaç duydum. Öncelikli dilim python olmasına rağmen, sunucu solaris olunca java ile yazmak daha cazip geldi. Öncelikli olarak test amaçlı birkaç satır kod yazdım. Akla gelen ilk örnek echo server oluyor 🙂 aşağıda multi thread çalışan, birden fazla kullanıcıya cevap verebilecek bir echo server var:)

Server.java

/**
 * @author: Aşkın Yollu 
 */

import java.net.*;
import java.io.*;

class Server {
    public static void main(String args[]) throws Exception {
        ServerSocket myService = null;
        Socket       client    = null;
        Worker       tmpworker = null;
        
        try {
            // 1234 nolu portu dinle
            myService = new ServerSocket(1234);
        } catch (IOException e) {
            System.out.println(e);
        }


        try {
            while (true) {
                // bağlantı kuracak istemcileri bekle
                client = myService.accept();

                // bağlantıları bir listeye ekle

                // istemci için yeni thread oluştur
                tmpworker = new Worker(client);
            }
        } catch (IOException e) {
            System.out.println(e);
        }

    }
}

Worker.java

/**
 * @author: Aşkın Yollu
 */

import java.net.*;
import java.io.*;

class Worker implements Runnable {
    private Socket           client;
    private DataInputStream  is;
    private DataOutputStream os;
    Thread       t;

    // Yaratıcı method
    public Worker(Socket client) {
        this.client = client;
        t = new Thread(this);
        t.start();
    }

    public void run() {
        String line = null;
        
        try {
            this.is = new DataInputStream(this.client.getInputStream());
            this.os = new DataOutputStream(this.client.getOutputStream());

            while (true) {
                line =this.is.readLine();
                this.os.writeBytes(line + "\n");
            }

        } catch (IOException e) {
            System.out.println(e);
        }
    }
}

kodları derleyip çalıştırdıktan sonra

telnet localhost 1234

komutunu verip birşeyler yazmaya başlayın, bakalım ne olacak 🙂

Client tarafını c ile yazacağım. Muhtemelen bir sonraki girdi c ile client socket olur.

Categories: Gezegen, Programlama Tags: , , , ,