使用服务器来管理 tcp 连接
我有一个服务器应用程序和一个客户端应用程序,以便在计算机之间发送和接收文件。
您可以跳过这一部分:
My algorithm is as follows:
`server: start listening for connections
client: establish a connection with the server
server: start a thread where that thread consist of a method listening for data send through the network stream
client: also start listening for data on a while loop runing on a separate thread.
\\so far if the client sends a byte array through the connection netwrok stream the server will receive it.
\\ also in each while lop the client and server there is a switch statement. if data received commes with the string "<file>" then it will start listening for the transfer of a file
client: send the string "<file>" to the server and start listening for that file on a different method.
server: because it receives the "<file>" keword it exits the listening loop and sends "<ok>" reply
.... so the talking between server and client keeps going ...........`
also the server is running yet more other threads such as still listening for
new connections. maybe another client want's to connect to it. so every time
a client connects the server, the server will start doing the same process
again on a separate thread (listening for new connections).
因此,您可以看到通过网络流发送的所有内容都被其他应用程序接收。
因此,建立连接后一切工作正常
现在考虑一下,为了从恰好位于房屋中的计算机 A 和恰好位于不同网络的办公室中的计算机 B 建立连接,必须发生哪些事情。注意(计算机 A 和计算机 B 可以访问互联网)。假设您希望计算机 A 作为服务器,计算机 B 作为客户端。所以你必须启动服务器。太好了,服务器现在正在运行。然后您将启动客户端应用程序。您还必须告诉房子里的路由器将所有流量从端口 X 转发到该服务器计算机,以便计算机 B 能够找到它。一旦完成,计算机 B 就能够建立连接。如果第二天您有不同的 IP 地址,因为我们大多数人都没有静态 IP,您将必须更改客户端计算机上的 IP 才能建立连接。所以它会变得非常复杂而且不友好。此外,您可能希望您的办公室计算机成为服务器,因为它可能始终处于开启状态,但也许您无权访问路由器,因此您就完蛋了。
解决方案:
1)
on my house call my internet service providers and pay to get a static IP.
I have not developed an algorithm but basically now computer A and computer
B will be clients and they will be connected to my computer at my house.
(on my house I will have to configure the router obviously to do port forwarding).
so know if computer A wants to send a file to computer B the server at my house
needs to have those to connections. the connection between computer A and the
connection through computer B. If something get's sent to the server at my
house from computer A then sent that to computer B and vice versa.
problems with this solution is: The upload speed at my house is very slow therefore
the transferring of files will be slow. also I don't know if my network at my
house will be able to manage multiple connections.
2)
step 1)
Host a website from my home still getting a static ip address. this time I also
have to get a domain so that users can remember me. so let's say that I am able
to host this website hosted on my house as somedomain.com . soon you understand
the purpose of the website....
step 2)
I don't know that much about this it is called "UDP punch hole into firewall".
this basically tells the router to port forward all traffic from port x to the
server so that users don't have to open ports on their routers. I DO NOT KNOW
HOW TO DEVELOP THIS I HAVE JUST HEARD ABOUT IT. so if I develop this computer
A will be able to connect to computer B without having to do any configuration
on the router which is nice.
step 3)
let's say that computer B is the server and computer A is the client that want's
to connect to computer B. so computer B will talk to my website at my house and
tell it that it is listening for connections on the ip address xxx.xxx.xxx.xxx .
then the client computer will access the website at my house and see the ip address
of computer B. now the connection is going to be able to be established.
step 4)
If the internet IP address of computer B changes for example. then let my website
know the new IP address. next time the client want's to connect to the server it
will be able to find the correct IP by looking into my website.
problems with this technique: I do not know how to implement
"UDP punch hole into firewall" so that users do not have to do any configurations
on their routers. an example of this will be helpful.
3)
there are a lot of companies out there that can host you a website. I don't know
about a company that will let me run a c# console application on their server.
Also I don't know if the file transfer of data going from computer A to a server
then to Computer B is more efficient than data going from computer A to computer B.
This solution will enable me to stop thinking about users having to configure their
routers which is nice.
该应用程序使您能够做更多的事情。我知道有几个应用程序可以让我只传输文件。如果有人能指出我使用哪种技术的正确方向,那就太好了。
I have a server application and a client application in order to send and receive files between computers.
you may skip this part:
My algorithm is as follows:
`server: start listening for connections
client: establish a connection with the server
server: start a thread where that thread consist of a method listening for data send through the network stream
client: also start listening for data on a while loop runing on a separate thread.
\\so far if the client sends a byte array through the connection netwrok stream the server will receive it.
\\ also in each while lop the client and server there is a switch statement. if data received commes with the string "<file>" then it will start listening for the transfer of a file
client: send the string "<file>" to the server and start listening for that file on a different method.
server: because it receives the "<file>" keword it exits the listening loop and sends "<ok>" reply
.... so the talking between server and client keeps going ...........`
also the server is running yet more other threads such as still listening for
new connections. maybe another client want's to connect to it. so every time
a client connects the server, the server will start doing the same process
again on a separate thread (listening for new connections).
So as you can see everything that get's sent through the network stream get's received by the other application.
So everything works great when a connection is established
Now think about the things that have to happen in order to establish a connection from computer A that happens to be in a house and Computer B happens to be on a office on a different network. Note (computer A and computer B have internet access). so let's say you want your computer A to be the server and computer B to be the client. So you will have to start the server. great the server is now running. Then you will start the client application. You will also have to tell the router in the house to forward all traffic from port X to that server computer so that computer B is able to find it. Once you do that computer B is able to establish a connection. If next day you have a different IP address because most of us we don't have static IP you will have to change that IP on the client computer in order to establish a connection. so it can get quite complicated and not friendly. Also you may want your office computer to be the server because it might always be on but maybe you don't have access to the router so you are screwed.
Solutions:
1)
on my house call my internet service providers and pay to get a static IP.
I have not developed an algorithm but basically now computer A and computer
B will be clients and they will be connected to my computer at my house.
(on my house I will have to configure the router obviously to do port forwarding).
so know if computer A wants to send a file to computer B the server at my house
needs to have those to connections. the connection between computer A and the
connection through computer B. If something get's sent to the server at my
house from computer A then sent that to computer B and vice versa.
problems with this solution is: The upload speed at my house is very slow therefore
the transferring of files will be slow. also I don't know if my network at my
house will be able to manage multiple connections.
2)
step 1)
Host a website from my home still getting a static ip address. this time I also
have to get a domain so that users can remember me. so let's say that I am able
to host this website hosted on my house as somedomain.com . soon you understand
the purpose of the website....
step 2)
I don't know that much about this it is called "UDP punch hole into firewall".
this basically tells the router to port forward all traffic from port x to the
server so that users don't have to open ports on their routers. I DO NOT KNOW
HOW TO DEVELOP THIS I HAVE JUST HEARD ABOUT IT. so if I develop this computer
A will be able to connect to computer B without having to do any configuration
on the router which is nice.
step 3)
let's say that computer B is the server and computer A is the client that want's
to connect to computer B. so computer B will talk to my website at my house and
tell it that it is listening for connections on the ip address xxx.xxx.xxx.xxx .
then the client computer will access the website at my house and see the ip address
of computer B. now the connection is going to be able to be established.
step 4)
If the internet IP address of computer B changes for example. then let my website
know the new IP address. next time the client want's to connect to the server it
will be able to find the correct IP by looking into my website.
problems with this technique: I do not know how to implement
"UDP punch hole into firewall" so that users do not have to do any configurations
on their routers. an example of this will be helpful.
3)
there are a lot of companies out there that can host you a website. I don't know
about a company that will let me run a c# console application on their server.
Also I don't know if the file transfer of data going from computer A to a server
then to Computer B is more efficient than data going from computer A to computer B.
This solution will enable me to stop thinking about users having to configure their
routers which is nice.
This application enables you to do many more things. I know there are several applications that will enable me to just transfer files. It will be nice if someone will point me on the right direction of which technique to use.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
如果您使用免费的 DNS 提供商(例如 DynDns 免费)和动态 IP 的 DNS 更新程序(例如 < a href="http://dyn.com/support/clients/" rel="nofollow">这个,然后您可以通过 DNS 名称而不是 IP 地址连接到您的服务器。使用更新程序,当您的地址发生变化时,DNS 记录将在 DNS 提供商处更新。
另一种选择可能是使用 DropBox 在客户端和服务器之间同步文件夹,然后转换您的服务器应用程序进入目录监视器,查找由 dropbox 同步的新文件。
If you use a a free DNS provider like DynDns free and a DNS updater for your dynamic IP like this one, then you can connect to your server by DNS name instead of IP address. Using the updater, when your address changes, the DNS record will be updated at the DNS provider.
Another option might be to use DropBox to synchronize a folder between the client and the server, and then convert your server application into a directory monitor that looks for new files synchronized by dropbox.