我目前正在学习java中的基本网络.我一直在玩两台计算机之间的服务器和客户端关系.但是,我无法弄清楚分布式程序(比如视频游戏)如何能够找到"主机"计算机,还能找到服务器运行的端口号,以便在两台计算机之间创建一个Socket.我真正看到创建套接字的唯一方法是使用已知的IP地址,并使用已知的端口号.
如何在LAN网络中搜索另一台搜索客户端的计算机(主机)?
如何在没有"ping"响应的所有可用端口的情况下确定服务器所在的端口(据我所知,这是一种糟糕的形式......关于'服务器攻击'......)?
在诸如视频游戏的情况下,在同一网络上可以存在任何数量的计算机,并且它们中的任何数量可能试图托管或以其他方式运行该应用程序.任何其他重要信息,或者可能参考比我正在使用的更详细的教程,关于在客户端上如此非常少的信息建立连接将是值得赞赏的.
非常感谢,
乔纳森
如果我正在开发一个客户端 - 服务器应用程序并且有3个文件(client.py,server.py和common.py,)并且common.py具有有用的功能(例如normalize()),那么客户端和服务器都可以轻松地执行以下操作:
from common import *
url = normalize(url)
Run Code Online (Sandbox Code Playgroud)
但是,如果出于各种奇怪的原因,我宁愿拥有单独的子目录(client,server和common),并且每个函数都有自己的文件,似乎没有类似的快捷方式.
我必须摆弄sys.path,然后在导入后我需要使用url=normalize.normalize(url).我确信我可以编写一个解决方法,但是我已经不知道有一些Pythonic处理这种方法吗?
更新:以下是按照Ignacio的建议完成后的方法:
$ cat common/__init__.py; client/login.py jcomeauictx.myopenid.com
import os, sys
for module in os.listdir(os.path.dirname(__file__)):
print >>sys.stderr, 'module: %s' % module
name, extension = os.path.splitext(module)
if extension == '.py' and not name.startswith('_'):
importer = 'from %s import %s' % (name, name)
print >>sys.stderr, 'import statement: %s' % importer
exec(importer) …Run Code Online (Sandbox Code Playgroud) 所以,我参加了一些编程课程(面向对象的,网络),但从未有过"动手"项目,而不是编码.
现在我想弄清楚这些SSH的内容是什么,我甚至无法弄清楚要使用哪个客户端,所以现在选择filezilla.
我的问题是,我在哪里可以阅读更多关于这些术语的信息,比如端口和诸如此类的东西,所以我没有漫无目的地学习.
谢谢!
我在c#中编写了一个tcp服务器,在java中编写了相应的客户端.我正在测试localhost上的连接,客户端能够连接到服务器.但是,当我发送消息时,客户端永远不会收到消息.使用调试器我已经验证了stream.Write(...)的执行.知道问题可能是什么?
这是c#服务器:
TcpClient client = (TcpClient)cl;
NetworkStream stream = client.GetStream();
byte[] msg = new byte[512];
int bytesRead;
while (running)
{
while (messages.getCount() > 0)
{
String msg = messages.Take();
if (cmd != null)
{
byte[] bytes = Encoding.UTF8.GetBytes(msg.ToCharArray());
try
{
stream.Write(bytes, 0, bytes.Length);
stream.Flush();
}
catch (Exception e)
{
}
}
}
Thread.Sleep(1000);
}
Run Code Online (Sandbox Code Playgroud)
而Java客户端:
public void run()
{
try
{
socket = new Socket(address, port);
in = new BufferedReader( new InputStreamReader( socket.getInputStream() ));
out = new PrintWriter(socket.getOutputStream());
running = …Run Code Online (Sandbox Code Playgroud) 我是软件工程专业的三年级大学生,参加过操作系统课程.
我一直在使用pthreads和套接字在C中使用客户端 - 服务器聊天应用程序.我一直在尝试使用pthread来提升客户端处理的并发性,而不会产生分叉的开销.(如果重要的话,我正在开发Ubuntu 11.04 x86).
而不是存储的一切,静态或全局/局部变量,我创建了两个结构化的数据类型,serverInfo_t并且clientInfo_t,其存储互斥,文件描述符,连接标志,和其他这样的信息.客户端列表实现为存储在serverInfo_t其中的简单单链表,在修改期间锁定和解锁.
在启动服务器应用程序时,我首先调用createServer(),它建立服务器,并最终启动一个子线程,其职责是监听新连接.此函数返回指向新分配serverInfo_t实例的指针,然后将其传递给调用createClient(serverInfo_t* pServer, int out_fd)以创建"admin"客户端,从而允许服务器本身用作客户端.这是我遇到问题的地方,因为它似乎一旦调用它就会产生段错误createClient().(一些修剪过的代码在下面:)
int main(int argc, char** argv)
{
// ...
// Get listenPort from argv[1].
// Initialize the server.
serverInfo_t* pServer = createServer(listenPort);
// If createServer() failed, exit.
if (!pServer) {
fatal_error("ERROR: Unable to create server!"); // exit program
}
// Create and register the admin client.
clientInfo_t* pAdmin = createClient(pServer, STDOUT_FILENO); // Outputs directly to stdout …Run Code Online (Sandbox Code Playgroud) 我正在netbeans中创建一个服务器 - 客户端应用程序项目.我使用netbeans gui builder在我的JFrame上制作了一些Jpanel和其他一些东西(按钮,文本字段,文本区域,菜单).当我按下新服务器按钮时,整个JFrame及其所有组件都被冻结,但服务器 - 客户端部分正在后台运行.我认为线程或其他东西有问题,但我真的不明白我应该做什么.
我认为这是一个很常见的问题,但我仍然找不到满意的答案,所以我会问自己.
这是一段代码:
// this is insine OnClickView
TextView status = (TextView) findViewById(R.id.status);
status.setText("Trying to connect to the server...");
try {
// this opens a socket and send a login request to the server.
int result = CommunicationManager.login(String email, String password);
switch (result) {
case CommunicationManager.SUCCESS:
// login ok, go on with next screen
break;
case CommunicationManager.WRONG_EMAIL:
status.setTextColor(Color.RED);
status.setText("Wrong Email!");
break;
case CommunicationManager.WRONG_PASSWORD:
status.setTextColor(Color.RED);
status.setText("Wrong Password!");
break;
}
} catch (CommunicationException e) {
status.setTextColor(Color.RED);
status.setText("Unable to estabilish a connection!");
} catch …Run Code Online (Sandbox Code Playgroud) 我正在研究客户端服务器应用程序,Windows Server和Linux Client.我正在使用多个并发客户端测试我的服务器.我尝试了来自客户端的20个并发连接,我注意到尽管所有20个请求都是相同的,但仍未处理一些请求.他们进入队列,由于某种原因轮到他们客户端关闭(客户端连接超时为5秒).
然后我添加了一个Thread.Sleep(1000),以检查它是否真的是异步但后来我意识到它不会处理其他请求,直到超时.尽管如此
现在我想知道我在这里失踪了什么,因为这主要发生在并发连接上?
public static void StartServer(IPAddress ipAddr, int port)
{
//IPEndPoint serverEndPoint = new IPEndPoint(ipAddr, port);
IPEndPoint serverEndPoint = new IPEndPoint(IPAddress.Any, port);
Socket clientListener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
try
{
clientListener.Bind(serverEndPoint);
clientListener.Listen(500);
Console.WriteLine("-- Server Listening: {0}:{1}",ipAddr,port);
while (true)
{
resetEvent.Reset();
Console.WriteLine("|| Waiting for connection");
clientListener.BeginAccept(new AsyncCallback(AcceptConnection), clientListener);
resetEvent.WaitOne();
}
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
}
public static void AcceptConnection(IAsyncResult ar)
{
// Get the socket that handles the client request.
Socket listener …Run Code Online (Sandbox Code Playgroud) 即使我总是使用Eclipse进行Java编程,我也是使用批处理文件执行jar文件的新手.
但是,我正在创建一个客户端/服务器项目,现在我正在测试它,我需要停止批处理执行以检查生成的输出而不关闭相关的批处理窗口.
我无法使用该pause命令,因为它们是循环程序(模拟"永无止境的客户端/服务器通话")...但是如果我使用CTRL + C并且我将其杀死,则窗口将关闭!
有没有办法在不关闭批处理的情况下使用CTRL + C命令?
我正在寻找的是Windows Form VB.Net上的一个简单的TCPClient/Listner示例.我是新手,Microsoft TCPClient/Listner类示例不是我想要的.我正在寻找的是TCPClient发送消息和TCPListener获取消息并发回消息"我收到你的消息"?
一点点帮助会很棒.我有一些代码,但只是发送消息到服务器而不是从服务器回到客户端..任何帮助将非常感谢..