ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > Программирование > С/С++, C#, Delphi, .NET, Asm
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

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

Репутация: 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
Algol
Регистрация: 29.05.2002
Сообщений: 1,793
Провел на форуме:
2050916

Репутация: 0


По умолчанию

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

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

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

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

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

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

Репутация: 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
Juda
Познающий
Регистрация: 02.08.2008
Сообщений: 55
Провел на форуме:
363117

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

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

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

  #6  
Старый 24.05.2009, 23:43
Аватар для Juda
Juda
Познающий
Регистрация: 02.08.2008
Сообщений: 55
Провел на форуме:
363117

Репутация: 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
[NiGHT]DarkAngel
Участник форума
Регистрация: 29.03.2005
Сообщений: 138
Провел на форуме:
812087

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

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

  #8  
Старый 25.05.2009, 17:15
Аватар для Juda
Juda
Познающий
Регистрация: 02.08.2008
Сообщений: 55
Провел на форуме:
363117

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

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

  #9  
Старый 25.05.2009, 19:01
Аватар для Algol
Algol
Регистрация: 29.05.2002
Сообщений: 1,793
Провел на форуме:
2050916

Репутация: 0


По умолчанию

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

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

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

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



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



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


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




ANTICHAT.XYZ