我有一个等待连接的主线程.它产生的客户端线程将回应客户端的响应(在本例中为telnet).但是说我想在一段时间后关闭所有套接字和所有线程,比如在1次连接之后.
我该怎么办?如果我clientSocket.close()从主线程做,它将不会停止做recv.它只会在我第一次通过telnet发送内容时停止,然后它将无法进行进一步的发送和recvs.
我的代码看起来像这样:
# Echo server program
import socket
from threading import Thread
import time
class ClientThread(Thread):
def __init__(self, clientSocket):
Thread.__init__(self)
self.clientSocket = clientSocket
def run(self):
while 1:
try:
# It will hang here, even if I do close on the socket
data = self.clientSocket.recv(1024)
print "Got data: ", data
self.clientSocket.send(data)
except:
break
self.clientSocket.close()
HOST = ''
PORT = 6000
serverSocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
serverSocket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
serverSocket.bind((HOST, PORT))
serverSocket.listen(1)
clientSocket, addr = serverSocket.accept()
print 'Got …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用cagradientlayer在我们的应用程序中绘制渐变,而不是让uiview的子类管理渐变.我遇到的一个问题是,当将具有渐变作为其主图层的子层的视图调整大小以适合我想要显示的数据时,该图层不会随之调整大小.我最终得到了原始帧大小的渐变层结束,而我的视图框架要大得多.
有没有办法让子层自动调整以适应其超级层的框架,或超级层的视图框架?
好的,我想确保我的情况和我彻底尝试的一切.我很确定我能做什么,但我还没有找到成功的完美组合.
我正在使用Entity Framework 4 RTM及其POCO支持.我正在寻找一个实体(Config),它包含与另一个实体(App)的多对多关系.我关闭延迟加载并禁用上下文的代理创建,并显式加载导航属性(通过.Include()或.LoadProperty()).但是,当加载导航属性(即,为给定的Config加载Apps)时,已加载的App对象已包含对已带入内存的Configs的引用.这会创建一个循环引用.
现在我知道WCF使用的DataContractSerializer可以通过将preserveObjectReferences参数设置为true 来处理循环引用.我已经尝试过这个我在网上发现的几个不同的属性实现.需要防止"对象图包含循环引用且无法序列化"错误.但是,它不会阻止整个图形的序列化,在Config和App之间来回传递.
如果我通过WcfTestClient.exe调用它,我从客户端得到一个stackoverflow(ha!)异常,我就被软管了.我从不同的调用环境得到不同的结果(C#单元测试与Web服务的本地引用似乎工作正常虽然我仍然可以无休止地在Configs和Apps之间来回钻取,但是从coldfusion环境调用它只返回第一个Config列表中的错误和其他错误.)我的主要目标是有一个序列化的图表表示我明确从EF加载(即:配置列表,每个与他们的应用程序,但没有应用程序回到配置导航.)
注意:我还尝试使用ProxyDataContractResolver技术并保持从我的上下文启用代理创建.这会引发抱怨所遇到的未知类型.我读到ProxyDataContractResolver在Beta2中没有完全工作,但应该在RTM中工作.
对于一些参考,这里大致是我如何查询服务中的数据:
var repo = BootStrapper.AppCtx["AppMeta.ConfigRepository"] as IRepository<Config>;
repo.DisableLazyLoading();
repo.DisableProxyCreation();
//var temp2 = repo.Include(cfg => cfg.Apps).Where(cfg => cfg.Environment.Equals(environment)).ToArray();
var temp2 = repo.FindAll(cfg => cfg.Environment.Equals(environment)).ToArray();
foreach (var cfg in temp2)
{
repo.LoadProperty(cfg, c => c.Apps);
}
return temp2;
Run Code Online (Sandbox Code Playgroud)
我认为问题的关键在于从实体框架4加载POCO对象的导航属性时,它预先填充了内存中已有对象的导航属性.尽管已经尽一切努力正确处理循环引用,但这反过来又加强了WCF序列化.
我知道这是很多信息,但它确实阻碍了我们在系统中使用EF4/POCO.我发现有几篇文章和博客涉及这些主题,但对于我的生活,我无法解决这个问题.随意简单地提问并帮助我集体讨论这种情况.
PS:为了彻底,我使用Spring .NET的HEAD版本注入WCF服务,以修复Spring.ServiceModel.Activation.ServiceHostFactory.但是我不认为这是问题的根源.
编辑:如果我没有循环引用,ProxyDataContractResolver类可以正常工作.(即:我将App.Configs的setter设置为私有,这会阻止属性的序列化.)当它通过App对象命中Configs时,它会爆炸 - 它们似乎不会被识别为与顶级配置相同的类型.
EDIT2: EF或WCF似乎无法识别出实体确实相等.即:'Config'与特定的'Config.Apps [x] .Configs [y]'相同.实体键在CSDL中为每个模型正确设置,我已经重写了Equals()函数,以根据实体的"Id"属性来比较实体.这符合症状,因为没有抛出循环引用错误,但它确实是一个循环引用(并炸毁WcfTestClient.exe)并且当它到达'Config.Apps [x] .Configs [y]'级别时,ProxyDataContractResolver会爆炸配置.(它不知道如何映射Config代理.ProxyDataContractResolver也可以工作.它就像它知道如何处理第一轮实体,但第二级它认为是不同的实体.)
哇,我可以罗嗦.对不起人!
我在使用Visual Studio 2010比较C#4.0中的单元测试中的字符串时遇到问题.同样的测试用例在Visual Studio 2008中正常工作(使用C#3.5).
这是相关的代码段:
byte[] rawData = GetData();
string data = Encoding.UTF8.GetString(rawData);
Assert.AreEqual("Constant", data, false, CultureInfo.InvariantCulture);
Run Code Online (Sandbox Code Playgroud)
在调试此测试时,该data字符串在肉眼看来包含与文字完全相同的字符串.当我打电话data.ToCharArray()时,我注意到该字符串的第一个字节data是价值65279这是UTF-8字节顺序标记.我不明白的是为什么要Encoding.UTF8.GetString()保持这个字节.
如何获取Encoding.UTF8.GetString()到不把字节顺序标记得到的字符串中?
更新:问题在于GetData(),它从磁盘读取文件,使用从文件中读取数据FileStream.readbytes().我通过使用a StreamReader并使用字符串将字符串转换为字节来纠正这个问题Encoding.UTF8.GetBytes(),这应该是它本来应该做的事情!谢谢你的帮助.
我的类构造函数中的以下代码行抛出了StackOverflowException:
myList = new string[]{}; // myList is a property of type string[]
Run Code Online (Sandbox Code Playgroud)
为什么会这样?什么是初始化空数组的正确方法?
更新:原因在于setter,我试图修剪所有值:
set
{
for (int i = 0; i < myList.Length; i++)
{
if (myList[i] != null) myList[i] = myList[i].Trim();
}
}
Run Code Online (Sandbox Code Playgroud) 将clojure应用程序变成像http://rawr.rubyforge.org/这样的可执行文件的最简单方法是什么?(exe和app文件也是)
我想创建一个依赖于模型的给定实例的类的控制器
-(BaseController *)getControllerForModel:(Model *)model
{
BaseController *controller = nil;
Class controllerClass = [BaseController class]; //the default value
//find the right controller
if ([model isMemberOfClass:[ModelClass1 class]])
controllerClass = [ConcreteController1 class];
else if ([model isMemberOfClass:[ModelClass2 class]])
controllerClass = [ConcreteController2 class];
else if ([model isMemberOfClass:[ModelClass3 class]])
controllerClass = [ConcreteController3 class];
...
else if ([model isMemberOfClass:[ModelClassX class]])
controllerClass = [ConcreteControllerX class];
else
Trace(TRACELEVEL_WARNING, @"Unrecognized model type: %@", NSStringFromClass([model class]));
//Now instantiate it with the model
controller = [[[controllerClass alloc] initWithModel:model] autorelease];
return slotController;
} …Run Code Online (Sandbox Code Playgroud) 在类似的问题"将byte []转换为String然后再转换为byte []",据说不执行byte []到String和返回转换,这看起来像适用于大多数情况,主要是当你不穿不知道使用的编码.
但是,在我的情况下,我正在尝试将数据保存到数据库javax.crypto.SecretKey,然后将其恢复.
该接口提供了一个方法getEncoded(),它返回编码为byte []的密钥数据,而另一个类我可以使用此byte []来恢复密钥.
所以,问题是,如何将关键字节写为String,然后返回byte []以重新生成密钥?
关于在iPhone OS设备上管理内存的黑色艺术:不同级别的内存警告意味着什么.1级?2级?拨号盘是11吗?
背景:经过大量的内存压力测试期 - 包括在播放iPod音乐播放器应用程序时运行我的iPad应用程序,我倾向于忽略我收到的随机但不常见的内存警告.我的应用程序永远不会崩溃.永远.我的应用程序是无泄漏的.而且,mems警告似乎并不重要.
谢谢,
道格
我的项目P依赖于依赖关系A依赖于依赖关系B.我的项目的pom.xml文件包含A作为依赖项,其jar包含在P的类路径中.然而,NoClassDefFoundError在P的运行时抛出,这源于缺少B罐.
Maven是否应该自动下载这些依赖项?
c# ×2
iphone ×2
objective-c ×2
arrays ×1
calayer ×1
clojure ×1
dependencies ×1
encryption ×1
equality ×1
ipad ×1
java ×1
maven-2 ×1
poco ×1
python ×1
recv ×1
sockets ×1
unit-testing ×1
utf-8 ×1
warnings ×1
wcf ×1