社区
Delphi
帖子详情
如果使用BIND绑定SERVERSOCKET和CLIENTSOCKET的端口?
extreme0001
2002-10-12 02:00:51
如果使用BIND绑定SERVERSOCKET和CLIENTSOCKET的端口?
...全文
26
回复
打赏
收藏
如果使用BIND绑定SERVERSOCKET和CLIENTSOCKET的端口?
如果使用BIND绑定SERVERSOCKET和CLIENTSOCKET的端口?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
Socket
简单通讯
Socket
简单通讯 //声明将要用到的类 private IPEndPoint ServerInfo;//存放服务器的IP和
端口
信息 private
Socket
Server
Socket
;//服务端运行的
SOCKET
private Thread ServerThread;//服务端运行的线程 private
Socket
[]
Client
Socket
;//为客户端建立的
SOCKET
连接 private int
Client
Numb;//存放客户端数量 private byte[] MsgBuffer;//存放消息数据 private void CmdStar_Click(object sender, EventArgs e) {
Server
Socket
= new
Socket
(AddressFamily.InterNetwork,
Socket
Type.Stream, ProtocolType.Tcp); //提供一个 IP 地址,指示服务器应侦听所有网络接口上的客户端活动 IPAddress ip = IPAddress.Any; ServerInfo = new IPEndPoint(ip, this.GetPort());
Server
Socket
.
Bind
(ServerInfo);//将
SOCKET
接口和IP
端口
绑定
Server
Socket
.Listen(10);//开始监听,并且挂起数为10
Client
Socket
= new
Socket
[65535];//为客户端提供连接个数 MsgBuffer = new byte[65535];//消息数据大小
Client
Numb = 0;//数量从0开始统计 ServerThread = new Thread(new ThreadStart(RecieveAccept));//将接受客户端连接的方法委托给线程 ServerThread.Start();//线程开始运行 CheckForIllegalCrossThreadCalls = false;//不捕获对错误线程的调用 this.CmdStar.Enabled = false; this.CmdStop.Enabled = true; this.StateMsg.Text = "服务正在运行..." + " 运行
端口
:" + this.GetPort().ToString(); this.
Client
List.Items.Add("服务于 " + DateTime.Now.ToString() + " 开始运行."); }
基于TCP的网络聊天室
一、实验目的 1.掌握通信规范的制定及实现。 2.练习较复杂的网络编程,能够把协议设计思想应用到现实应用中。 二、实验内容和要求 1.进一步熟悉VC++6编程环境; 2.利用VC++6进行较复杂的网络编程,完成网络聊天室的设计及编写; 三、实验(设计)仪器设备和材料 1.计算机及操作系统:PC机,Windows; 2.网络环境:可以访问互联网; 四、 TCP/IP程序设计基础 基于TCP/IP的通信基本上都是利用
SOCKET
套接字进行数据通讯,程序一般分为服务器端和用户端两部分。设计思路(VC6.0下): 第一部分 服务器端 一、创建服务器套接字(create)。 二、服务器套接字进行信息
绑定
(
bind
),并开始监听连接(listen)。 三、接受来自用户端的连接请求(accept)。 四、开始数据传输(send/receive)。 五、关闭套接字(close
socket
)。 第二部分 客户端 一、创建客户套接字(create)。 二、与远程服务器进行连接(connect),如被接受则创建接收进程。 三、开始数据传输(send/receive)。 四、关闭套接字(close
socket
)。 C
Socket
的编程步骤:(注意我们一定要在创建MFC程序第二步的时候选上Windows
Socket
选项,其中
Server
Socket
是服务器端用到的,
Client
Socket
是客户端用的。) (1)构造C
Socket
对象,如下例: C
Socket
Server
Socket
; C
Socket
Client
Socket
; (2)C
Socket
对象的Create函数用来创建Windows
Socket
,Create()函数会自行调用
Bind
()函数将此
Socket
绑定
到指定的地址上面。如下例:
Server
Socket
.Create(823); //服务器端需要指定一个
端口
号,我们用823。
Client
Socket
.Create(); //客户端不用指定
端口
号。 (3)现在已经创建完基本的
Socket
对象了,现在我们来启动它,对于服务器端,我们需要这个
Socket
不停的监听是否有来自于网络上的连接请求,如下例:
Server
Socket
.Listen(5);//参数5是表示我们的待处理
Socket
队列中最多能有几个
Socket
。 (4)对于客户端我们就要实行连接了,具体实现如下例:
Client
Socket
.Connect(CString SerAddress,Unsinged int SerPort);//其中SerAddress是服务器的IP地址,SerPort是
端口
号。 (5)服务器是怎么来接受这份连接的呢?它会进一步调用Accept(Receive
Socket
)来接收它,而此时服务器端还须建立一个新的C
Socket
对象,用它来和客户端进行交流。如下例: C
Socket
Receive
Socket
;
Server
Socket
.Accept(Receive
Socket
); (6)如果想在两个程序之间接收或发送信息,MFC也提供了相应的函数。如下例:
Server
Socket
.Receive(String,Buffer); //String是你要发送的字符串,Buffer是发送字符串的缓冲区大小。
Server
Socket
.Send(String,Butter);//String是你要接收的字符串,Buffer是接收字符串的缓冲区大小。
基于TCP的网络聊天室的设计
<计算机网络实验> 基于TCP的网络聊天室的设计 -实验指导 一、实验目的 1.掌握通信规范的制定及实现。 2.练习较复杂的网络编程,能够把协议设计思想应用到现实应用中。 二、实验内容和要求 1.进一步熟悉VC++6编程环境; 2.利用VC++6进行较复杂的网络编程,完成网络聊天室的设计及编写; 三、实验(设计)仪器设备和材料 1.计算机及操作系统:PC机,Windows; 2.网络环境:可以访问互联网; 四、 TCP/IP程序设计基础 基于TCP/IP的通信基本上都是利用
SOCKET
套接字进行数据通讯,程序一般分为服务器端和用户端两部分。设计思路(VC6.0下): 第一部分 服务器端 一、创建服务器套接字(create)。 二、服务器套接字进行信息
绑定
(
bind
),并开始监听连接(listen)。 三、接受来自用户端的连接请求(accept)。 四、开始数据传输(send/receive)。 五、关闭套接字(close
socket
)。 第二部分 客户端 一、创建客户套接字(create)。 二、与远程服务器进行连接(connect),如被接受则创建接收进程。 三、开始数据传输(send/receive)。 四、关闭套接字(close
socket
)。 C
Socket
的编程步骤:(注意我们一定要在创建MFC程序第二步的时候选上Windows
Socket
选项,其中
Server
Socket
是服务器端用到的,
Client
Socket
是客户端用的。) (1)构造C
Socket
对象,如下例: C
Socket
Server
Socket
; C
Socket
Client
Socket
; (2)C
Socket
对象的Create函数用来创建Windows
Socket
,Create()函数会自行调用
Bind
()函数将此
Socket
绑定
到指定的地址上面。如下例:
Server
Socket
.Create(823); //服务器端需要指定一个
端口
号,我们用823。
Client
Socket
.Create(); //客户端不用指定
端口
号。 (3)现在已经创建完基本的
Socket
对象了,现在我们来启动它,对于服务器端,我们需要这个
Socket
不停的监听是否有来自于网络上的连接请求,如下例:
Server
Socket
.Listen(5);//参数5是表示我们的待处理
Socket
队列中最多能有几个
Socket
。 (4)对于客户端我们就要实行连接了,具体实现如下例:
Client
Socket
.Connect(CString SerAddress,Unsinged int SerPort);//其中SerAddress是服务器的IP地址,SerPort是
端口
号。 (5)服务器是怎么来接受这份连接的呢?它会进一步调用Accept(Receive
Socket
)来接收它,而此时服务器端还须建立一个新的C
Socket
对象,用它来和客户端进行交流。如下例: C
Socket
Receive
Socket
;
Server
Socket
.Accept(Receive
Socket
); (6)如果想在两个程序之间接收或发送信息,MFC也提供了相应的函数。如下例:
Server
Socket
.Receive(String,Buffer); //String是你要发送的字符串,Buffer是发送字符串的缓冲区大小。
Server
Socket
.Send(String,Butter);//String是你要接收的字符串,Buffer是接收字符串的缓冲区大小。
socket
网络编程
一个简单的
socket
网络编程例子: 服务器代码: #include #include #include #include #pragma comment(lib,"ws2_32.lib") //这句话的意思是加载ws2_32.lib这个静态库 #define NETWORK_EVENT WM_USER+100 //如果你用mfc做开发,你可以点击菜单project-〉setting-〉link-〉object/library中添加这个静态库。 //如果你用c语言,你需要通过#pragma comment(命令来连接静态库 int main(int argc, char* argv[]){ HANDLE hThread = NULL; //判断是否输入了
端口
号 if(argc!=3){ printf("Usage: %sPortNumber\n",argv[1]); exit(-1); } //把
端口
号转化成整数 short port; if((port = atoi(argv[2]))==0){ printf("
端口
号有误!"); exit(-1); } WSADATA wsa; //初始化套接字DLL if(WSAStartup(MAKEWORD(2,2),&wsa)!=0){ //高字节指定了次版本号,低字节指定了主版本号,两个字节加到一起,就是你想要的Winsock库的版本号了 printf("套接字初始化失败!"); exit(-1); } //创建套接字
SOCKET
server
Socket
; if((
server
Socket
=
socket
(AF_INET,SOCK_STREAM,IPPROTO_TCP))==INVALID_
SOCKET
){ printf("创建套接字失败!"); exit(-1); } struct sockaddr_in serverAddress; memset(&serverAddress,0,sizeof(sockaddr_in)); serverAddress.sin_family=AF_INET; serverAddress.sin_addr.S_un.S_addr = htonl(INADDR_ANY); serverAddress.sin_port = htons(port); //
绑定
if(
bind
(
server
Socket
,(sockaddr*)&serverAddress,sizeof(serverAddress))==
SOCKET
_ERROR){ printf("套接字
绑定
到
端口
失败!
端口
: %d\n",port); exit(-1); } //进入侦听状态 if(listen(
server
Socket
,SOMAXCONN)==
SOCKET
_ERROR){ printf("侦听失败!"); exit(-1); } printf("Server %d is listening......\n",port);
SOCKET
client
Socket
[5],max
Socket
;//用来和客户端通信的套接字 struct sockaddr_in
client
Address;//用来和客户端通信的套接字地址 memset(&
client
Address,0,sizeof(
client
Address)); int addrlen = sizeof(
client
Address); fd_set fd_read; int i=0; int j; char buf[4096]; char buff[4096]="exit"; while(1) { FD_ZERO(&fd_read); max
Socket
=
server
Socket
; FD_SET(
server
Socket
,&fd_read); //FD_SET(
client
Socket
[i-1],&fd_read); for(j=0;j
client
Socket
[j],&fd_read); if(max
Socket
"); //gets(buff); if(select(max
Socket
+1,&fd_read,NULL,NULL,NULL)>0) { if(FD_ISSET(
server
Socket
,&fd_read)) { if(buff=="") { if((
client
Socket
[i++]=accept(
server
Socket
,(sockaddr*)&
client
Address,&addrlen))==INVALID_
SOCKET
) { printf("接受客户端连接失败!"); exit(-1); } else { for(j=0;j5) { printf("超过最大客户端数"); exit(-1); } } else { int bytes; for(int k=0;k
client
Socket
[k],&fd_read)) { bytes=recv(
client
Socket
[k],buf,sizeof(buf),0); if(bytes==-1) { //listen(
server
Socket
,SOMAXCONN); for (int l=k;l
client
Socket
[l]=
client
Socket
[l+1]; i--; } /*if(bytes==0) { //printf("fdsdf"); listen(
server
Socket
,SOMAXCONN); for (int l=k;l0) { buf[bytes]='\0'; printf("Message from %s: %s\n",inet_ntoa(
client
Address.sin_addr),buf); if(send(
client
Socket
[k],buf,bytes,0)==
SOCKET
_ERROR) { printf("发送数据失败!"); exit(-1); } } } } } } } //清理套接字占用的资源 WSACleanup(); return 0; } 客户端代码: #include #include #include #pragma comment(lib,"ws2_32.lib") int main(int argc, char* argv[]){ //判断是否输入了IP地址和
端口
号 if(argc!=4){ printf("Usage: %s IPAddress PortNumber\n",argv[1]); exit(-1); } //把字符串的IP地址转化为u_long unsigned long ip; if((ip=inet_addr(argv[2]))==INADDR_NONE){ printf("不合法的IP地址:%s",argv[1]); exit(-1); } //把
端口
号转化成整数 short port; if((port = atoi(argv[3]))==0){ printf("
端口
号有误!"); exit(-1); } printf("Connecting to %s:%d......\n",inet_ntoa(*(in_addr*)&ip),port); WSADATA wsa; //初始化套接字DLL if(WSAStartup(MAKEWORD(2,2),&wsa)!=0){ printf("套接字初始化失败!"); exit(-1); } //创建套接字
SOCKET
sock,
server
Socket
; if((sock=
socket
(AF_INET,SOCK_STREAM,IPPROTO_TCP))==INVALID_
SOCKET
){ printf("创建套接字失败!"); exit(-1); } struct sockaddr_in serverAddress; memset(&serverAddress,0,sizeof(sockaddr_in)); serverAddress.sin_family=AF_INET; serverAddress.sin_addr.S_un.S_addr = ip; serverAddress.sin_port = htons(port); //建立和服务器的连接 if(connect(sock,(sockaddr*)&serverAddress,sizeof(serverAddress))==
SOCKET
_ERROR) { printf("建立连接失败!"); exit(-1); } char buf[4096]; while(1){ printf(">"); //从控制台读取一行数据 gets(buf); if(send(sock,buf,strlen(buf),0)==
SOCKET
_ERROR){ printf("发送c数据失败!"); exit(-1); } int bytes; if((bytes=recv(sock,buf,sizeof(buf),0))==
SOCKET
_ERROR) { printf("接收c数据失败!\n"); exit(-1); } else { buf[bytes]='\0'; printf("Message from %s: %s\n",inet_ntoa(serverAddress.sin_addr),buf); } } //清理套接字占用的资源 WSACleanup(); return 0; }
C#实现
Socket
的消息收发,
Server
Socket
,
Client
Socket
知道
Socket
原理,但是一直没有在代码里面尝试怎么操作,闲来无事实现了一个初步的
Socket
服务器和客户端连接的Demo,但是没有实现更高级一点的系列化传输,加解密处理以及队列和断线重连等处理,感兴趣的话可以自己再尝试尝试。主要分服务器
Socket
和客户端
Socket
,只用了简单的字符串转byte[]的传递测试收发消息。客户端给服务器发all代表广播给所有客户端,给服务器发single代表只点对点的进行回消息。分
Server
Socket
和
Client
Socket
来具体实现服务器与客户端的收发逻辑。
Delphi
5,388
社区成员
262,730
社区内容
发帖
与我相关
我的任务
Delphi
Delphi 开发及应用
复制链接
扫一扫
分享
社区描述
Delphi 开发及应用
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章