大家好,今天来为大家解答bit socket这个问题的一些问题点,包括bitsocket也一样很多人还不知道,因此呢,今天就来为大家分析分析,现在让我们一起来看看吧!如果解决了您的问题,还望您关注下本站哦,谢谢~
本文目录
如何用SOCKET实现两台计算机之间的通讯不停地弹出socket error#10054,connection reset by peerC#中关于SOCKET类和TCPCLIENT类端口(port)和插口(socket)的区别是什么如何用SOCKET实现两台计算机之间的通讯两部分代码,一个server,一个client。
server端代码:
#include"stdio.h"
#include"Winsock2.h"
#include"iostream"
#include"string"
//#pragmacomment(lib,"ws2_32.lib")
//definehostIPandusableport.
#defineHOST_IP127.0.0.1
#defineHOST_PORT8080
#defineOK_STR"OK"
voidmain(){
//theversionbitofWinsock
intversion_a=1;//lowbit
intversion_b=1;//highbit
//makeword
WORDversionRequest=MAKEWORD(version_a,version_b);
WSADatawsaData;
interr;
err=WSAStartup(versionRequest,&wsaData);
if(err!=0){
printf("ERROR!");
return;
}
if(LOBYTE(wsaData.wVersion)!=1||HIBYTE(wsaData.wVersion)!=1)
{
printf("WRONGWINSOCKVERSION!");
WSACleanup();
return;
}
SOCKETsocServer=socket(AF_INET,SOCK_DGRAM,0);
SOCKADDR_INaddr_Srv;
//It'snestthreestructsasS_un_b,S_un_wandS-un.(union)
addr_Srv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);
//setprotocolfamily
addr_Srv.sin_family=AF_INET;
//sethostport
addr_Srv.sin_port=htons(HOST_PORT);
//bindsockettothehost
bind(socServer,(SOCKADDR*)&addr_Srv,sizeof(SOCKADDR));
//addressofaclient
SOCKADDR_INaddr_Clt;
charrecvBuf[100];
intfromlen=sizeof(SOCKADDR);
while(true){
recvfrom(socServer,recvBuf,100,0,(SOCKADDR*)&addr_Clt,&fromlen);std::cout<<recvBuf<<std::endl;
sendto(socServer,OK_STR,strlen(OK_STR)+1,0,(SOCKADDR*)&addr_Clt,sizeof(SOCKADDR));
}
closesocket(socServer);
WSACleanup();
}
client端代码:
#include"Winsock2.h"
#include"iostream"
#include"stdio.h"
#pragmacomment(lib,"ws2_32.lib")
#defineHOST_IP"127.0.0.1"
#defineHOST_PORT8080
voidmain(){
//theversionbitofWinsock
intversion_a=1;//lowbit
intversion_b=1;//highbit
//makeword
WORDversionRequest=MAKEWORD(version_a,version_b);
WSADatawsaData;
interror;
error=WSAStartup(versionRequest,&wsaData);
if(error!=0){
printf("ERROR!");
return;
}
if(LOBYTE(wsaData.wVersion)!=1||HIBYTE(wsaData.wVersion)!=1)
{
printf("WRONGWINSOCKVERSION!");
WSACleanup();
return;
}
//requestinfoobtainedbyuser'sinput
charrequestStr[100];
//buildasockeet
SOCKETsocClient=socket(AF_INET,SOCK_DGRAM,0);
SOCKADDR_INaddrSrv;
addrSrv.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");
addrSrv.sin_family=AF_INET;//settheprotocolfamily
addrSrv.sin_port=htons(HOST_PORT);//settheportnumber
//arraytostorethedatathatserverfeedback.
charcRecvBuf[100];
while(true){
std::cin>>requestStr;
//sendtofunctionisusedtosendprogramedatatotheserver
sendto(socClient,requestStr,strlen(requestStr)+1,0,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));
recv(socClient,cRecvBuf,strlen(cRecvBuf)+1,0);
std::cout<<cRecvBuf<<std::endl;
}
//closethesocketandcleanupthewsadata
closesocket(socClient);
WSACleanup();
//return0;
}
不停地弹出socket error#10054,connection reset by peer使用有效的软件杀毒
如果不行就试试下列方法:
1.用系统还原到没有生成此文件的日期。
2.用系统自带的工具,开始——所有程序——附件——系统工具——选择磁盘清理或者磁盘碎片整理程序,两个都试试。
3.开始——运行——输入“msconfig”——选择“诊断启动”(以免不相关的程序加载导致正在使用删不了),重启机子,按F8,进入安全模式,找到文件夹以及文件,直接删除。
4.如果上述说明都不能解决,那就把你有用的文件转移到其他的盘里面去,(比如E盘里有用的文件转移到D盘,然后在D盘点右键格式化后,好了以后再转移回来),把此盘格式化,注意,要选择普通格式化,千万不要选择快速格式化,不然白忙活了,因为普通格式化除了把该盘的所有程序全删除以外,同时还在自动检测硬盘的坏扇区(硬盘是由N个扇区组成,多少根据大小而定),从而避免硬盘下次使用坏的扇区来存放数据,而快速格式化只是负责删除该盘的数据,并没有达到诊断的效果。
好了,这样做一定能解决问题,还有什么不明白的可以留言给我。。
C#中关于SOCKET类和TCPCLIENT类这个是网上找的资料,看下对你有没有帮助....
Socket和TcpClient有什么区别
回答:
"网络编程中,使用Socket和TcpClient有什么区别"
http://community.csdn.net/Expert/TopicView.asp?id=4971812
本人回贴1:
-----------------------------
物理层:HUB,网线
链路层:MAC,ARP,交换机
网络层:IP,ICMP,IGMP,路由器
传输层:TCP,UDP
会话层:HTTP,SMTP,FTP,POP3
表示层:SOAP,SSL
应用层:WebService的Method
-------------------------------
Socket是对网络层操作
TcpClient是对传输层操作
ASP.NET是对会话层操作
你可以用Socket访问IIS中的ASP.NET的页面,不过传输层,会话层的转换就要你自已用代码实现了
问:
你可以用Socket访问IIS中的ASP.NET的页面,不过传输层,会话层的转换就要你自已用代码实现了
=================================
上面的话是什么意思?
本人回贴2:
如果你用Socket访问IIS,要做如下考虑:
网络层:
使用什么网络层协议,如IPV4还是IPV6;如果开发路由器也要考虑这个问题
传输层:
你要使用那种传输层协议,比如是TCP.
会话层:
你要使用那种会话层协议,如HTTP.
=====================================================
也就是说你可以用
Socket类.Send方法发送如下字串的二进制到IIS
//
GET/?T1=234&T2=789&B1=%CC%E1%BD%BBHTTP/1.1
Accept:image/gif,image/x-xbitmap,image/jpeg,image/pjpeg,application/vnd.ms-excel,application/vnd.ms-powerpoint,application/msword,*/*
Accept-Language:zh-cn
Accept-Encoding:gzip,deflate
User-Agent:Mozilla/4.0(compatible;MSIE6.0;WindowsNT5.0;.NETCLR1.0.3705)
Host:192.168.0.2:81
Connection:Keep-Alive
//
你会收用Receive到如下数据:
//
HTTP/1.0200OK
MIME_version:1.0
Content_Type:text/html
Content_Length:N
[inputtype=button]
//
然后你可以将此数据解析成一个HTML页的按钮
///////////////////////////////////////////////////////////
上面的操作就是:
网络层-----会话层,用Socket访问IIS中的ASP.NET的页面
传输层,会话层的转换自已用代码实现了
但是要这样做,WEB开发人员会死的很惨,所以WEB开发只要实现[会话层-----会话层]就可以了
他要要做的只是[form]到IIS,Response到客户端。
而到了WebService的Method开发时,Response都不用考虑了
本人回贴3:
现在再说[Socket和TcpClient有什么区别]
Socket:网络层
TcpClient:传输层
当你只考虑:主机,端口,数据传输时,用TcpClient,或UdpClient
当你要考虑:IP封包,路由,IP数据包时,用Socket
还有NET中的Socket类提供了一些对Socket操作的高级封装,但同时无法实现一些Socket底部操作。
目前在NET中不建议使用Socket,就如现在不建议使用NET开发DirectX一样,虽然可以做到
等路由器,交换机都使用WinCE,集成Net类时,也许我上面的话会过时
端口(port)和插口(socket)的区别是什么插口包含了端口,因为插口=(IP地址,端口号)。插口是TCP连接的端点。
插口(socket)有多种意思。当使用API时,插口往往被看成是操作系统的一种抽象,这时,插口和一个文件描述符是很相似的,并且是应用编程接口API的一部分。插口由应用程序产生,并指明它将由客户还是服务器来使用。当应用进程创建一个插口时,要指明该插口使用的端口号。
端口则是应用层服务的的一种代号,它用来标志应用层的进程。端口是一个16bit的整数。各种服务器使用的端口号都是保留端口号,以便使客户能够找到服务器。例如万维网服务器使用的端口号是80。
在发送数据时,应用层的数据通过端口向下交付到运输层。在接收数据时,运输层的数据通过适当的端口向上交付到应用层的某个应用程序。
谢谢你看完我的回答
关于本次bit socket和bitsocket的问题分享到这里就结束了,如果解决了您的问题,我们非常高兴。