当套接字用于网络程序开发时,大多数情况下会遇到汉字的发送和接收。如果字符串是默认处理的,它将得到一堆随机代码。
由于汉字是用双字节表示的,所以必须根据Unicode编码的方式对汉字字符串进行处理,即使用socket发送汉字时,字符串应提前转换成Unicode格式。
下面是socket通信的一个简单代码。
服务器代码
尝试
{
IP地址IP地址解析MYIP =(127.0.0.1);
TcpListener MyListener =新TCPListener(myip,convert.toint16(1235));
mylistener开始();
插座mysocket = mylistener.acceptsocket();
Byte{} MyData = new byte{256};
向服务器端接收(MYDATA);
this.richtextbox1.appendtext(system.text.encoding.unicode.getstring(MYDATA));
unicodeencoding myinfo =新unicodeencoding();
向服务器端发送(MyInfo.GetBytes(从服务器:你好!我是一个服务器);
}
catch(异常前)
{
MessageBox显示(ex.message,信息提示,MessageBoxButtons.OK,MessageBoxIcon。信息);
}
客户机代码
尝试
{
TcpClient myclient =新的TcpClient();
MyClient.连接(127.0.0.1
流mystream = myclient.getstream();
unicodeencoding myinfo =新unicodeencoding();
字节{} MYDATA =新的字节{ 256 };
字节{ } mysendbyte = myinfo.getbytes(从客户:你好!我是客户);
mystream。写(mysendbyte,0,MySendByte,长);
mystream读(MYDATA,0, 256);
this.richtextbox1.appendtext(system.text.encoding.unicode.getstring(MYDATA));
}
catch(异常前)
{
MessageBox显示(ex.message,信息提示,MessageBoxButtons.OK,MessageBoxIcon。信息);
}
另外,中文在数据库中的访问也是一个头疼的问题,其实解决这个问题很简单,下面是一段sql server代码:
尝试
{
SqlConnection myconnect =新的SqlConnection(m_connectionstrings);
插入新记录
字符串mysql =字符串。格式(插入bsm_systemserviceinfotable } {值({ 0 },{ 1 }的N,N'{ 2 }',N'{ 3 },和N'{ 4 })。
mycommand =新SqlCommand(MySQL,MyConnect);
MyCommand.Connection.Open();
MyCommand.ExecuteNonQuery();
MyCommand.Connection.Close();
}
抓住(system.exception E)
{
MessageBox显示(e.tostring());
}
你可以看到,SQL脚本命令,所有的参数字符串的前n的性格,那份声明Unicode编码字符,当然,是要注意了,如果这个字段的值可能包含中国,必须字段类型声明为nchar、nvarchar、ntext、N在这里的意思是相同。