आरएफसी दस्तावेज़ निश्चित रूप से बेकार नहीं हैं! आप सही हैं कि आपको USER
NICK
भेजना होगा। NOTICE
आपको मिल रहा है कि आईआरसी सर्वर IDENTD
नामक प्रोटोकॉल के माध्यम से अपने पीसी पर वापस कनेक्ट करने का प्रयास कर रहा है। यह अपेक्षाकृत सरल प्रोटोकॉल है लेकिन इसका अपवाद यह है कि यह जानना चाहता है कि सर्वर से जुड़े मेजबान पर एक प्रोग्राम, सर्वर के स्थानीय/दूरस्थ बंदरगाहों का उपयोग कर रहा है।
संभावना है, आपकी फ़ायरवॉल इसे रोक रही है (और आप शायद आईडीएन्टडी सर्वर नहीं चला रहे हैं)। यह एक बड़ी समस्या नहीं है, हालांकि एक पूरी तरह से विकसित आईआरसी ग्राहक इसे लागू करेगा। आप अधिक here देख सकते हैं। यह बहुत अधिक विस्तार में चला जाता है। यह लागू करने के लिए अपेक्षाकृत सरल है।
अधिकांश आईआरसी सर्वर दे देंगे अगर यह आप कनेक्ट नहीं कर सकता है, और मैं सटीक इस के पक्ष प्रभाव (यह एक समय हो गया है) भूल गए हैं, लेकिन अगले संदेशों आप कर रहे हैं के लिए बाहर देखने के लिए चाहते हैं MOTD_START/MOTD/MOTD_END और ERR_NOMOTD। के बाद आपको दिन के संदेश का अंत प्राप्त हुआ है, या ERR_NOMOTD (एक नहीं है) को संभाला है, तो आप चैनलों में शामिल होने के लिए JOIN
का उपयोग कर सकते हैं।
^(?:[:@]([^\\s]+))?([^\\s]+)(?: ((?:[^:\\s][^\\s]* ?)*))?(?: ?:(.*))?$
आईआरसी RFC, सूची के लिए सभी संभव कोड और उनके अर्थ:
संयोग से, यह एक आईआरसी सर्वर से इनपुट मिलान के लिए एक अच्छा रेगुलर एक्सप्रेशन से है।मुझे यकीन नहीं है कि आप क्यों सोचते हैं कि वे बेकार हैं। आप किस संदर्भ में जा रहे हैं?
संपादित
मैं आईआरसी के लिए मेरे पुराने सी ++ कोड ऊपर देखा तो मैं थोड़ा और अधिक उपयोगी हो सकता है। कनेक्ट करने के बाद, यह एक चरण में प्रवेश करती है (कि मैं करार दिया है) बातचीत:
तोल-मोल स्टेज: कोई एक पासवर्ड सर्वर के लिए निर्दिष्ट किया गया है
- है, यह
PASS mypassword
भेजें।
USER
कमांड भेजें।
- नेगोशिएट उपनाम चरण
ERR_NOMOTD
, END_OFMOTD
के लिए प्रतीक्षा करें। इनमें से कोई एक आने तक, आप "आधिकारिक रूप से जुड़े" नहीं हैं। ऐसा नहीं है कि कनेक्शन के दौरान, उपनाम का उपयोग करना चाहते से प्रयोग में है पूरी तरह से संभव है:
उपनाम स्टेज निगोशिएट। इसलिए ग्राहक को:
- जारी करना एक
NICK
आदेश
- आप फिर से एक
ERR_NICKINUSE
प्रतिक्रिया है, यह मुद्दा प्राप्त करते हैं। यदि आपके पास उपयोग करने के लिए कोई और उपनाम नहीं है, तो आप या तो उपयोगकर्ता को किसी अन्य के लिए बकाया या संकेत दे सकते हैं।
कुछ अन्य बात पर विचार करना:
- देखो
PING
आदेश के लिए हमारी। जब आप निष्क्रिय होते हैं तो सर्वर इसे भेज देगा। इसे उच्च प्राथमिकता के रूप में संभालें और सर्वर द्वारा दिए गए डेटा के साथ PONG
लौटाएं। ऐसा करने में विफलता यह सुनिश्चित करेगी कि आप डिस्कनेक्ट हो जाएं और जब आप आईआरसी क्लाइंट का परीक्षण कर रहे हों, तो यह पीछे के अंत में दर्द हो सकता है।
बोनस मज़ा
यह आईआरसी आज्ञाओं के लिए मेरी enum, आप आसानी से करने के लिए सी # में यह डाल करने के लिए सक्षम होना चाहिए है पर्याप्त:
// reply ids
enum Reply
{
RplNone = 0,
// Initial
RplWelcome = 001, // :Welcome to the Internet Relay Network <nickname>
RplYourHost = 002, // :Your host is <server>, running version <ver>
RplCreated = 003, // :This server was created <datetime>
RplMyInfo = 004, // <server> <ver> <usermode> <chanmode>
RplMap = 005, // :map
RplEndOfMap = 007, // :End of /MAP
RplMotdStart = 375, // :- server Message of the Day
RplMotd = 372, // :- <info>
RplMotdAlt = 377, // :- <info> (some)
RplMotdAlt2 = 378, // :- <info> (some)
RplMotdEnd = 376, // :End of /MOTD command.
RplUModeIs = 221, // <mode>
// IsOn/UserHost
RplUserHost = 302, // :userhosts
RplIsOn = 303, // :nicknames
// Away
RplAway = 301, // <nick> :away
RplUnAway = 305, // :You are no longer marked as being away
RplNowAway = 306, // :You have been marked as being away
// WHOIS/WHOWAS
RplWhoisHelper = 310, // <nick> :looks very helpful DALNET
RplWhoIsUser = 311, // <nick> <username> <address> * :<info>
RplWhoIsServer = 312, // <nick> <server> :<info>
RplWhoIsOperator = 313, // <nick> :is an IRC Operator
RplWhoIsIdle = 317, // <nick> <seconds> <signon> :<info>
RplEndOfWhois = 318, // <request> :End of /WHOIS list.
RplWhoIsChannels = 319, // <nick> :<channels>
RplWhoWasUser = 314, // <nick> <username> <address> * :<info>
RplEndOfWhoWas = 369, // <request> :End of WHOWAS
RplWhoReply = 352, // <channel> <username> <address> <server> <nick> <flags> :<hops> <info>
RplEndOfWho = 315, // <request> :End of /WHO list.
RplUserIPs = 307, // :userips UNDERNET
RplUserIP = 340, // <nick> :<nickname>=+<user>@<IP.address> UNDERNET
// List
RplListStart = 321, // Channel :Users Name
RplList = 322, // <channel> <users> :<topic>
RplListEnd = 323, // :End of /LIST
RplLinks = 364, // <server> <hub> :<hops> <info>
RplEndOfLinks = 365, // <mask> :End of /LINKS list.
// Post-Channel Join
RplUniqOpIs = 325,
RplChannelModeIs = 324, // <channel> <mode>
RplChannelUrl = 328, // <channel> :url DALNET
RplChannelCreated = 329, // <channel> <time>
RplNoTopic = 331, // <channel> :No topic is set.
RplTopic = 332, // <channel> :<topic>
RplTopicSetBy = 333, // <channel> <nickname> <time>
RplNamReply = 353, // = <channel> :<names>
RplEndOfNames = 366, // <channel> :End of /NAMES list.
// Invitational
RplInviting = 341, // <nick> <channel>
RplSummoning = 342,
// Channel Lists
RplInviteList = 346, // <channel> <invite> <nick> <time> IRCNET
RplEndOfInviteList = 357, // <channel> :End of Channel Invite List IRCNET
RplExceptList = 348, // <channel> <exception> <nick> <time> IRCNET
RplEndOfExceptList = 349, // <channel> :End of Channel Exception List IRCNET
RplBanList = 367, // <channel> <ban> <nick> <time>
RplEndOfBanList = 368, // <channel> :End of Channel Ban List
// server/misc
RplVersion = 351, // <version>.<debug> <server> :<info>
RplInfo = 371, // :<info>
RplEndOfInfo = 374, // :End of /INFO list.
RplYoureOper = 381, // :You are now an IRC Operator
RplRehashing = 382, // <file> :Rehashing
RplYoureService = 383,
RplTime = 391, // <server> :<time>
RplUsersStart = 392,
RplUsers = 393,
RplEndOfUsers = 394,
RplNoUsers = 395,
RplServList = 234,
RplServListEnd = 235,
RplAdminMe = 256, // :Administrative info about server
RplAdminLoc1 = 257, // :<info>
RplAdminLoc2 = 258, // :<info>
RplAdminEMail = 259, // :<info>
RplTryAgain = 263, // :Server load is temporarily too heavy. Please wait a while and try again.
// tracing
RplTraceLink = 200,
RplTraceConnecting = 201,
RplTraceHandshake = 202,
RplTraceUnknown = 203,
RplTraceOperator = 204,
RplTraceUser = 205,
RplTraceServer = 206,
RplTraceService = 207,
RplTraceNewType = 208,
RplTraceClass = 209,
RplTraceReconnect = 210,
RplTraceLog = 261,
RplTraceEnd = 262,
// stats
RplStatsLinkInfo = 211, // <connection> <sendq> <sentmsg> <sentbyte> <recdmsg> <recdbyte> :<open>
RplStatsCommands = 212, // <command> <uses> <bytes>
RplStatsCLine = 213, // C <address> * <server> <port> <class>
RplStatsNLine = 214, // N <address> * <server> <port> <class>
RplStatsILine = 215, // I <ipmask> * <hostmask> <port> <class>
RplStatsKLine = 216, // k <address> * <username> <details>
RplStatsPLine = 217, // P <port> <??> <??>
RplStatsQLine = 222, // <mask> :<comment>
RplStatsELine = 223, // E <hostmask> * <username> <??> <??>
RplStatsDLine = 224, // D <ipmask> * <username> <??> <??>
RplStatsLLine = 241, // L <address> * <server> <??> <??>
RplStatsuLine = 242, // :Server Up <num> days, <time>
RplStatsoLine = 243, // o <mask> <password> <user> <??> <class>
RplStatsHLine = 244, // H <address> * <server> <??> <??>
RplStatsGLine = 247, // G <address> <timestamp> :<reason>
RplStatsULine = 248, // U <host> * <??> <??> <??>
RplStatsZLine = 249, // :info
RplStatsYLine = 218, // Y <class> <ping> <freq> <maxconnect> <sendq>
RplEndOfStats = 219, // <char> :End of /STATS report
RplStatsUptime = 242,
// GLINE
RplGLineList = 280, // <address> <timestamp> <reason> UNDERNET
RplEndOfGLineList = 281, // :End of G-line List UNDERNET
// Silence
RplSilenceList = 271, // <nick> <mask> UNDERNET/DALNET
RplEndOfSilenceList = 272, // <nick> :End of Silence List UNDERNET/DALNET
// LUser
RplLUserClient = 251, // :There are <user> users and <invis> invisible on <serv> servers
RplLUserOp = 252, // <num> :operator(s) online
RplLUserUnknown = 253, // <num> :unknown connection(s)
RplLUserChannels = 254, // <num> :channels formed
RplLUserMe = 255, // :I have <user> clients and <serv> servers
RplLUserLocalUser = 265, // :Current local users: <curr> Max: <max>
RplLUserGlobalUser = 266, // :Current global users: <curr> Max: <max>
// Errors
ErrNoSuchNick = 401, // <nickname> :No such nick
ErrNoSuchServer = 402, // <server> :No such server
ErrNoSuchChannel = 403, // <channel> :No such channel
ErrCannotSendToChan = 404, // <channel> :Cannot send to channel
ErrTooManyChannels = 405, // <channel> :You have joined too many channels
ErrWasNoSuchNick = 406, // <nickname> :There was no such nickname
ErrTooManyTargets = 407, // <target> :Duplicate recipients. No message delivered
ErrNoColors = 408, // <nickname> #<channel> :You cannot use colors on this channel. Not sent: <text> DALNET
ErrNoOrigin = 409, // :No origin specified
ErrNoRecipient = 411, // :No recipient given (<command>)
ErrNoTextToSend = 412, // :No text to send
ErrNoTopLevel = 413, // <mask> :No toplevel domain specified
ErrWildTopLevel = 414, // <mask> :Wildcard in toplevel Domain
ErrBadMask = 415,
ErrTooMuchInfo = 416, // <command> :Too many lines in the output, restrict your query UNDERNET
ErrUnknownCommand = 421, // <command> :Unknown command
ErrNoMotd = 422, // :MOTD File is missing
ErrNoAdminInfo = 423, // <server> :No administrative info available
ErrFileError = 424,
ErrNoNicknameGiven = 431, // :No nickname given
ErrErroneusNickname = 432, // <nickname> :Erroneus Nickname
ErrNickNameInUse = 433, // <nickname> :Nickname is already in use.
ErrNickCollision = 436, // <nickname> :Nickname collision KILL
ErrUnAvailResource = 437, // <channel> :Cannot change nickname while banned on channel
ErrNickTooFast = 438, // <nick> :Nick change too fast. Please wait <sec> seconds. (most)
ErrTargetTooFast = 439, // <target> :Target change too fast. Please wait <sec> seconds. DALNET/UNDERNET
ErrUserNotInChannel = 441, // <nickname> <channel> :They aren't on that channel
ErrNotOnChannel = 442, // <channel> :You're not on that channel
ErrUserOnChannel = 443, // <nickname> <channel> :is already on channel
ErrNoLogin = 444,
ErrSummonDisabled = 445, // :SUMMON has been disabled
ErrUsersDisabled = 446, // :USERS has been disabled
ErrNotRegistered = 451, // <command> :Register first.
ErrNeedMoreParams = 461, // <command> :Not enough parameters
ErrAlreadyRegistered= 462, // :You may not reregister
ErrNoPermForHost = 463,
ErrPasswdMistmatch = 464,
ErrYoureBannedCreep = 465,
ErrYouWillBeBanned = 466,
ErrKeySet = 467, // <channel> :Channel key already set
ErrServerCanChange = 468, // <channel> :Only servers can change that mode DALNET
ErrChannelIsFull = 471, // <channel> :Cannot join channel (+l)
ErrUnknownMode = 472, // <char> :is unknown mode char to me
ErrInviteOnlyChan = 473, // <channel> :Cannot join channel (+i)
ErrBannedFromChan = 474, // <channel> :Cannot join channel (+b)
ErrBadChannelKey = 475, // <channel> :Cannot join channel (+k)
ErrBadChanMask = 476,
ErrNickNotRegistered= 477, // <channel> :You need a registered nick to join that channel. DALNET
ErrBanListFull = 478, // <channel> <ban> :Channel ban/ignore list is full
ErrNoPrivileges = 481, // :Permission Denied- You're not an IRC operator
ErrChanOPrivsNeeded = 482, // <channel> :You're not channel operator
ErrCantKillServer = 483, // :You cant kill a server!
ErrRestricted = 484, // <nick> <channel> :Cannot kill, kick or deop channel service UNDERNET
ErrUniqOPrivsNeeded = 485, // <channel> :Cannot join channel (reason)
ErrNoOperHost = 491, // :No O-lines for your host
ErrUModeUnknownFlag = 501, // :Unknown MODE flag
ErrUsersDontMatch = 502, // :Cant change mode for other users
ErrSilenceListFull = 511 // <mask> :Your silence list is full UNDERNET/DALNET
}; // eo enum Reply
हालांकि यह एक दर्दनाक समाधान है, तो आप हमेशा ऊपर MIRC हुक सकता है (या जो भी लोग इन दिनों का उपयोग करें) फ़िडलर के प्रॉक्सी उपयोग करने के लिए और आप यातायात के सभी देख सकते हैं यह एक कमरे में शामिल होने के लिए पर हस्ताक्षर करने से/acks अनुरोध। –
इसके बारे में पूर्ण स्रोत कोड के साथ कोई अंतिम समाधान? – Kiquenet