c++ telnet

又一个 Telnet 三无程序 
转自:http://www.freeeim.com/
双击自动滚屏 发布者:Alex 发布时间:2008-6-4 阅读:97次 


所谓三无:
1.无内存泄漏;
2.无多余代码;
3.无实际用途(测试专用,呵呵)。
为了把打字时间转化为代码优化时间,所以很多代码都是这里COPY来,那里COPY去的。
注:此程序只适合初学者研究,高手等辈请不屑一顾。
说什么也没用,看代码最实际;
完整打包下载地址:http://www.freeeim.com/downloads/telnet.zip
//////////////////////////////////////////////////////////////////////////////
// client
// testsocket02.cpp : Defines the entry point for the console application.
// 最近不知为什么,老喜欢Copy别人的代码,然后往自己程序里粘贴。
// 拼拼凑凑,有多了一个工能。
#include "stdafx.h"
#include <stdlib.h>
#include <winsock2.h>
#include <process.h>
#include <conio.h>
#pragma comment(lib, "ws2_32.lib")
int tt = 1;
// 专门接受
void r(void* sock)
{
if(NULL == sock)
  _endthread();
sockaddr_in aa;
SOCKET *s2 = (SOCKET*)sock;
int slen = sizeof(aa);
SOCKET s = *s2;
char c;
int rval = 0;
getpeername(s,(sockaddr*)&aa,&slen);
printf("OK , connected with %s:%u...\r\n\r\n",inet_ntoa(aa.sin_addr),ntohs(aa.sin_port));
while(tt)
{
  rval = recv(s,&c,1,0);
  if (rval == 0 || rval == -1)
  {
   printf("--- Disconnected !\r\n\r\n");
   // 自然死
   _endthread();
  }
  putc(c,stdout);
}
}
int main(int argc, char* argv[])
{
WSADATA wData;
WSAStartup(MAKEWORD(2,2),&wData);
SOCKET s;
bool SSL = false;
sockaddr_in dA,aa;
int slen = sizeof(sockaddr_in);
memset(&dA,0,sizeof(dA));
dA.sin_family = AF_INET;
unsigned long inaddr;
inaddr = inet_addr("127.0.0.1");
if (inaddr != INADDR_NONE)
  memcpy(&dA.sin_addr,&inaddr,sizeof(inaddr));
else
  printf("error.\n");
dA.sin_port = htons(1888);
s = socket(AF_INET,SOCK_STREAM,0);
if (INVALID_SOCKET == s)
  printf("error.\n");
if (connect(s,(sockaddr*)&dA,slen) < 0)
{
  printf("--- Cannot connect !\r\n");
  return 3;
}
_beginthread(r, 4026, &s);
while(tt)
{
  char c = getche();
  if (c == 13)
  {
   c = '\n';
   putch©;
  }
  int rval = 0;
  rval = send(s,&c,1,0);
  if (rval == 0 || rval == -1)
  {
   printf("\n--- Disconnected !\r\n\r\n");
   // 让r线程自然死
   tt=0;
  }
}
printf("Hello World!\n");
return 0;
}

你可能感兴趣的:(C++,c,socket,C#)