HOME FORUMS MEMBERS RECENT POSTS LOG IN  
× Авторизация
Имя пользователя:
Пароль:
Нет аккаунта? Регистрация
Баннер 1   Баннер 2
НОВЫЕ ТОРГОВАЯ НОВОСТИ ЧАТ
loading...
Скрыть
Вернуться   ANTICHAT > ПРОГРАММИРОВАНИЕ > С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

С# и сокеты
  #1  
Старый 08.05.2009, 10:00
[NiGHT]DarkAngel
Участник форума
Регистрация: 29.03.2005
Сообщений: 138
С нами: 11114426

Репутация: 129
По умолчанию С# и сокеты

Пишу программку,ее основой является мини подобие http сервера,проблема заключается в следующем,когда из студии я компилирую проект,запускает сервер и я могу обратиться к нему браузером и сервер вернет браузере ответ,который соответственно я увижу в окне браузера... но если я не перезапуская свой сервер попрошу отдать в браузер другую страничку,то браузер пишет,что не может соединиться с сервером ... помогите пожалуйста решить проблему,заранее очень сильно благодарен.

ЗЫ Сильно ногами за код не пинать,только учусь

PHP код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.Net.Sockets;

namespace 
http_agent
{

    class 
http_serv
    
{
        private const 
int MAX_BUFFER 4096;
        private const 
string notfound "HTTP/1.1 404 File not found\n\n";
        private const 
string header_send "HTTP/1.1 200 OK\nServer: tinyHttp\nConnection: close\nContent-Type: text/html\n\n";
        
Socket listenfd null;
        
IPEndPoint pe null;

        public 
int initHTTPServ()
        {           
          
          
//if(listenfd.) listenfd.Close(); -- проверить существует ли сокет,если да то закрыть его...
            
listenfd = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
            
pe = new IPEndPoint(IPAddress.Any8080);

            
listenfd.SetSocketOption(SocketOptionLevel.Socket,SocketOptionName.ReuseAddress,false);        

            
listenfd.Bind(pe);

            
listenfd.Listen(1);
 
            
System.Console.WriteLine("HTTP Server start ...");
            return 
0;
        }

        public 
void checkHttpServer()
        {
            
//Подключаемся к сокету и вызываем функцию обслуживания запроса
            
handleConnection(listenfd.Accept());         
        }


        public 
string getFileName(string inbufint start)
        {
            
int i start0;
            
string ret "";
            
char[] outs = new char[80 1];

            while (
inbuf[i] == ' 'i++;
           
            for (; 
inbuf.Lengthi++)
            {
                if (
inbuf[i] == ' ')
                {
                    break;
                }
                
outs[j++] = inbuf[i];               
            }

            
ret = new string(outs,0,j);

            if (
ret == "/")                 
            {                
                
ret "/index.html";
            }

            return 
ret;           
        }

        public 
void emitHTTPResponseHeader(Socket connfd)
        {
            
connfd.Send(Encoding.ASCII.GetBytes(header_send));
        }

        public 
void handleConnection(Socket connfd)
        {
            
Console.WriteLine("Handle Connections...");
            
int lenmaxloop;
            
byte[] buffer = new byte[http_serv.MAX_BUFFER+1];
            
string filename "";
            
string str_in_sock "";

            
max 0loop 1;
            while (
loop == 1
            {
             
len connfd.Receive(buffer);
             
buffer[max+len] = 0;
             if (
len <= 0) return;
             
max += len;            
             if ((
buffer[max-4] == 0x0d) && (buffer[max-3] == 0x0a) && (buffer[max-2] == 0x0d) && (buffer[max-1] == 0x0a)) loop 0;            
            }

            
str_in_sock Encoding.ASCII.GetString(buffer0max);

            if (
str_in_sock.Substring(03) == "GET")  //если метод GET 
            
{

                
filename getFileName(str_in_sock4); //получаем имя запрашиваемого файла файла
             
      
            
if      (filename == "/index.html") { Console.WriteLine("GET /index.html");}//emitNews( connfd );
            
else if (filename == "/config.html") { Console.WriteLine("GET /config.html");} //emitConfig( connfd );
            
else if (filename == "/art") { Console.WriteLine("GET /art"); } //emitArticle( connfd, filename );
            
else 
            {             
                
connfd.Send(Encoding.ASCII.GetBytes(notfound));
                
connfd.Close();
                
Console.WriteLine("GET Not Found");
            }

          }else if (
str_in_sock.Substring(04) == "POST")  //Если метод POST
           
{

            
filename getFileName(str_in_sock4);

           if (
filename == "/clear"
           {
            
//clearEntries();
            
emitHTTPResponseHeader(connfd);
            
buffer Encoding.ASCII.GetBytes("<P><H1>Нажмите назад и перезагрузите страницу</H1><P>\n\n");
            
connfd.Send(buffer);
           } else 
           {
             
connfd.Send(Encoding.ASCII.GetBytes(notfound));
             
connfd.Close();
           }
         } 
         else 
         {
            
connfd.Send(Encoding.ASCII.GetBytes("HTTP/1.1 501 Not Implemented\n\n"));
           
         }
        }        
    }


    class 
Program
    
{
        static 
void Main(string[] args)
        {
           
http_serv serv = new http_serv();
           
serv.initHTTPServ();
           
serv.checkHttpServer();
           
System.Console.ReadLine();
        }
    }

 
Ответить с цитированием

  #2  
Старый 08.05.2009, 10:36
Algol
Регистрация: 29.05.2002
Сообщений: 1,793
С нами: 12604706

Репутация: 0


По умолчанию

Не удивительно, ведь ты же обрабатываешь только один запрос пользователя, после чего программа просто заканчивает выполнение...

Нужно handleConnection(listenfd.Accept()); хотя бы в цикле выполнять. А лучше асинхронно или с потоками...
 
Ответить с цитированием

  #3  
Старый 08.05.2009, 14:55
[NiGHT]DarkAngel
Участник форума
Регистрация: 29.03.2005
Сообщений: 138
С нами: 11114426

Репутация: 129
По умолчанию

Спасибо огромное,во я дурак то
 
Ответить с цитированием

  #4  
Старый 24.05.2009, 23:00
[NiGHT]DarkAngel
Участник форума
Регистрация: 29.03.2005
Сообщений: 138
С нами: 11114426

Репутация: 129
По умолчанию

Подниму небольшой вопросик про сокеты опять ... Можно пинать меня сильно , но главное что бы было за что :-D... есть вот такой код

PHP код:
            nntp_he Dns.GetHostEntry(nntpServer);

            foreach(
IPAddress tmp_ip_serv in nntp_he.AddressList)
            {
                
ip_nntp_serv tmp_ip_serv;
            }

            
nntp_conn = new Socket(AddressFamily.InterNetworkSocketType.StreamProtocolType.Tcp);
            
nntp_ep = new IPEndPoint(ip_nntp_serv119);

            
Console.WriteLine("Соединяемся с " nntpServer);

            
nntp_conn.Connect(nntp_ep);

            
buffer = new byte[gVarible.MAX_LINE 1];
            
nntp_conn.Receive(buffer);
            
Console.WriteLine(Encoding.ASCII.GetString(buffer));


            
buffer null;

            
nntp_conn.Send(Encoding.ASCII.GetBytes("c"));

            
Console.WriteLine("q");

            
byte[] buffer2 = new byte[1024];

            
Console.WriteLine("q2");

            
nntp_conn.Receive(buffer2);

            
Console.WriteLine("q3");

              
Console.WriteLine(Encoding.ASCII.GetString(buffer2)); 
Проблема в том что он всего лишь один раз принимает данные из сокета ,после соединения,а когда я отправляю серверу через открытый с ним сокет данные ,а затем пытаюсь прочитать....

nntp_conn.Receive(buffer2);
Console.WriteLine("q3");
Console.WriteLine(Encoding.ASCII.GetString(buffer2 ));

Вот эта часть кода вообще не выполняется,доходит только до Console.WriteLine("q2"); и все,буду безумно благодарен и поставлю плюсики от всей души,если поможите разобраться с этой проблемкой.Заранее спасибо!
 
Ответить с цитированием

  #5  
Старый 24.05.2009, 23:31
Juda
Познающий
Регистрация: 02.08.2008
Сообщений: 55
С нами: 9354619

Репутация: 30
По умолчанию

Может полный исходник кинь. Чтоб и сервер и клиент было видно.

Последний раз редактировалось Juda; 24.05.2009 в 23:38..
 
Ответить с цитированием

  #6  
Старый 24.05.2009, 23:43
Juda
Познающий
Регистрация: 02.08.2008
Сообщений: 55
С нами: 9354619

Репутация: 30
По умолчанию

вот исходник чата на C#. Посмотри че да как. http://sourceforge.net/project/downloading.php?group_id=71539&filename=SharpChat-1.1.1.zip&a=95975655
 
Ответить с цитированием

  #7  
Старый 25.05.2009, 07:17
[NiGHT]DarkAngel
Участник форума
Регистрация: 29.03.2005
Сообщений: 138
С нами: 11114426

Репутация: 129
По умолчанию

Это и был клиент,а в роли сервера выступает сервер nntp новостей,к которому я тут соответственно и подключаюсь
 
Ответить с цитированием

  #8  
Старый 25.05.2009, 17:15
Juda
Познающий
Регистрация: 02.08.2008
Сообщений: 55
С нами: 9354619

Репутация: 30
По умолчанию

Чувак, у тебя есть исходник, комп, мозг, дебагер и еще есть MSDN, в котором куча примеров по сокетам. Пройдись дебагером по коду (не по мозгам ), посмотри че не работает. Смысл два дня ждать ответа на форуме, если самому можно за часик все склепать.
 
Ответить с цитированием

  #9  
Старый 25.05.2009, 19:01
Algol
Регистрация: 29.05.2002
Сообщений: 1,793
С нами: 12604706

Репутация: 0


По умолчанию

Цитата:
Сообщение от [NiGHT]DarkAngel  
Вот эта часть кода вообще не выполняется,доходит только до Console.WriteLine("q2"); и все
Что "и все"? Выпадает ошибка? Какая?
Поставь try, отлови ошибку.
 
Ответить с цитированием

  #10  
Старый 25.05.2009, 21:38
[NiGHT]DarkAngel
Участник форума
Регистрация: 29.03.2005
Сообщений: 138
С нами: 11114426

Репутация: 129
По умолчанию

Вот именно что ошибки никакой нет ,просто не выполняется дальше код ... не один из трех исключения для сокета через catch не выпадает ... возьму совет Juda пойду дебаггером и снифером
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Delphi сокеты Flame of Soul С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby 2 22.04.2009 04:56
Сокеты and max_execution_error Велемир PHP 8 02.02.2009 17:52
Отправляем хтмл-письмо через сокеты je0n Статьи 4 07.02.2007 15:23
[Delphi] Закачка файлов через сокеты Navern С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby 3 04.02.2007 16:13
В общем делаю запрос в сокеты! и Не чего не возвращает! AIN С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby 19 07.08.2005 17:27



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT ™ © 2001- Antichat Kft.

×

Создать сделку

Продавец: ник или ID

Название сделки:

Сумма USDT:

Срок сделки, дней:

Кто платит комиссию:

Условия сделки:

После создания сделки средства будут зарезервированы в холде до завершения сделки.

×

Мои сделки

Загрузка...
×

Сделка


Загрузка чата...
×

ESCROW ADMIN PANEL

Загрузка...
Загрузка...