검색결과 리스트
글
C#에서 SQLLite를.. 열고 닫고.. 하면 table is locked
-_-...
처음은 잘된다.. 근데.. 두번째 부터는 저런 메세지가 뜬다..
하지만 당황하지 말자..
open->close 끝이라 생각하면 바로 걸리니..
connection을 dispose 걸어주고 command까지 dispose 걸어주면 바로 해결이 된다..
당황스런 시츄에이션.. 이건 좀 ㅠㅠ 아닌거 같아 ㅠㅠㅠ
설정
트랙백
댓글
글
음... 깔끔하게 포스팅을 하려고 하다가..
일단은.. 참고 할 수 있는 사이트 링크를.. 살포시..
http://blog.naver.com/ratmsma/40028387013
위 두군데에서 보면 NSIS를 어느정도 입맛에 맞게 할 수가 있다.
NSIS는 무료 배포 패키지를 만드는 프로그램인데..
오픈소스 기반에 에디터에서 기본적인 스크립트를 생성을 해 주니 편하다.
거기에서 이제 등록 화면들을 자체적으로 수정해서 쓰면 되니..
일반적인 배포 프로그램 만드는 것보다 이게 훨씬 수월한 느낌...
설정
트랙백
댓글
글
오랜만이라 그런가.. 적응이 안된? 뭐.. 그런.. 잠시의 작업으로
내 기억이라면 또 까먹기에..
NetworkStream으로 주고 받을 때도 Receive 될 시 대기가 된 다는 것은.. 알고 있던건데..
문제는.. DeSerialize...
Exception이 죽어라 떠 주시길래..
구글신이 응답을 주셨...다..
샘플 코드를 보면..
[Server]
sealed class AllowAllAssemblyVersionsDeserializationBinder : System.Runtime.Serialization.SerializationBinder
{
public override Type BindToType(string assemblyName, string typeName)
{
Type typeToDeserialize = null;
String currentAssembly = Assembly.GetExecutingAssembly().FullName;
assemblyName = currentAssembly;
typeToDeserialize = Type.GetType(string.Format("{0},{1}", typeName, assemblyName));
return typeToDeserialize;
}
}
IPAddress address = IPAddress.Parse("192.168.1.143");
TcpListener server = new TcpListener(address, 7771);
server.Start();
while(true)
{
Socket sock = server.AcceptSocket();
if (sock.Connected)
{
NetworkStream nStream = new NetworkStream(sock);
MemoryStream mStream = new MemoryStream();
byte[] size = new byte[4];
int receivedData;
receivedData = nStream.Read(size, 0, size.Length);
mStream.Write(size, 0, receivedData);
Console.WriteLine(BitConverter.ToInt32(size, 0));
mStream.Seek(0, SeekOrigin.Begin);
byte[] buffer = new byte[BitConverter.ToInt32(size, 0)];
receivedData = nStream.Read(buffer, 0, buffer.Length);
mStream.Write(buffer, 0, receivedData);
BinaryFormatter bf = new BinaryFormatter();
bf.Binder = new AllowAllAssemblyVersionsDeserializationBinder();
mStream.Seek(0, SeekOrigin.Begin);
testData a = bf.Deserialize(mStream) as testData;
Console.WriteLine(a.test);
mStream.Close();
nStream.Close();
}
}
[Client]
static void Main(string[] args)
{
ArrayList a = new ArrayList();
testData data = new testData();
data.test = "test";
a.Add(data);
MemoryStream m = serialize(data);
m.Seek(0, SeekOrigin.Begin);
byte[] size = new byte[4];
byte[] buffer = m.ToArray();
size = BitConverter.GetBytes(buffer.Length);
TcpClient client = new TcpClient("192.168.1.143", 7771);
NetworkStream nStream = client.GetStream();
nStream.Write(size, 0, size.Length);
nStream.Write(buffer, 0, buffer.Length);
nStream.Close();
client.Close();
}
private static MemoryStream serialize(testData arr)
{
BinaryFormatter bf = new BinaryFormatter();
MemoryStream mStream = new MemoryStream();
bf.Serialize(mStream, arr);
return mStream;
}
저~짝 Server에 보면 AllowAllAssemblyVersionsDeserializationBinder Class가 있다..
저 부분을 추가 해 주고 BinaryFormatter에 Bind 시켜주니..
이쁘게 잘된다..
그리고 다들 알다 시피 직렬화 할 때는 대상 Class 위에 [Serialize] 명시는 꼭 해주고..
또한.. 서로 다른 Library를 만들어 놓고 Class 내용만 같게 하는 일이 있다면.. 정말.. 혼나야겠고..
해 보면 죽어라 Exception이 일어나는 일을 만나게 될 것임돠.
테스트 해 봤더니 신날하게 나서 방법 없을라나 고민 해 봤지만 하다가 포기..
그냥 같은 library 쓰고 하면 되니까..
요새 손 안대던 부분까지 다시 하니까 기억이 가물 가물.. 나도 이제 끝인가ㅠ
RECENT COMMENT