网络服务器如何接收客户端数据
A. 服务器与客户端之间数据交互
C/S模式和B/S各有其有点也各有其缺点,B/S模式在开发中需要考虑数据如何从客户端提交到服务器端,数据又如何返回到客户端,这些是B/S模式所特有的,在去年之前,开发B/S模式的程序,我都是利用form来交互数据,当我看到XML之后,发现XML是个好冬冬,有很多优点,有好的东西当然不能独享啦,想当年为了实现XML交互数据,几乎把网络翻了个遍。咚,一块砖头上来了。呵呵,废话少说,下面我们就进入正题。
B/S模式分为服务器端和客户端,客户端接受用户的请求,客户端向应用服务提出请求,应用服务从数据库服务中获得数据,应用服务将数据进行计算并将结果提交给客户端,客户端将结果呈现给用户。这样,我们就看到了数据从客户到服务器,经过服务器的处理再返回到客户端,由客户端软件(如IE)显示结果。
(以ASP教本语言为例,其它的语言一样哈。)
1.Form方式
Form方式是最基本的向服务器提交数据的方式。
test.asp文件代码:
<%@ Language=VBScript %>
<%
Response.Expires=-1
Response.CharSet="UTF-8"
Session.CodePage="65001"
%>
<form name="frmTest" id="frmTest" action="test.asp" method="POST">
<input name="name" id=" name" type="text" value="">
<input type="hidden" name="number" id="number" value="10">
<input type="submit" value="Submit" name="B1">
</form>
<%
dim intnumber
dim strname
if IsEmpty(Request("name")) then
strname =""
else
strname =Request("name")
end if
if IsEmpty(Request("number")) then
intnumber =0
else
intnumber =Request("number")
end if
希望对你能有所帮助。
B. 客户端与网络服务器建立连接后用什么方式传送数据
那要看你要传送什么了。传送文件你可以通过网络共享、内部通讯软件等等
C. C# socket 接收数据
1)如果“数据条数”定义是:客户端发送数据帧的数量,那么,服务器每当收到一次客户端的数据帧,计数就加1;例如,客户端A连续发送了“你好”,“我在这里”两条信息,服务器的计数就应该增加2;
2)服务器可以接收来自多个客户端的数据,可以分别统计每个客户端数据条数,也可以统计所以客户端数据总的条数。
针对上面两个需求,实现起来大致框架如下:
1)定义一个Dictionary<string,int> num,用来计数
Dictionary<string,int>num=newDictionary<string,int>();
其中,泛型参数string用于表示客户端;int用于计数
2)每当服务器接收到来自客户端数据后,可以获得客户端的IPEndPoint clientEP,将clientEP转换成字符串,作为Dictionary 的键值,用来标识客户端
stringclient=clientEP.ToString();
if(!num.ContainsKey(client))
{
//在集合中添加一个客户端计数项
num.Add(client,0);
}
//数据条数加1
num[client]++;
3)分别统计并显示每个客户的数据条件
foreach(varcinnum)
{
Console.WriteLine("客户端{0},总数{1}",c.Key,c.Value);
}
4)统计并显示服务器接收到所有客户端数据条数的总数
varqry=fromcinnum.Valuesselectc
Console.WriteLine("接收总数{0}",qry.Sum());
D. 客户端如何读取服务器发送的数据
一般来讲是客户端向服务器发送服务请求,服务器根据客户端所发送的服务请求给客户端发数据。这里包括网络协议和服务认证。你可以再网上下载抓包工具来读取发送服务请求和返回服务请求的结果。 数据都是二进制、八进制和十六进制相互转换封包来进行发送的。客户端向服务器发送一个请求,客户端会对该请求认证来确定是否合法。合法则会将数据封包加密反馈给客户端,客户端则得到请求结果。具体你可查一些有关网络服务的资料。
E. 网络编程服务器和客户端都接收不到数据,求大神指教,代码如下:
php,asp,asp.net各有各的连接字符串,而且连接sqlserver,mysql,Orcale等等都不一样,建议根据你使用的情况,具体先掌握一种,其它上手就会快一些。
数据库应该是属于服务器端的一个组成部分,一般架站后数据库在服务器端,选用什么数据库需要你自己确认。
F. 如何使用VB中的UDP穿过客户端上网用的服务器返回给客户端数据
你问的就是网络传输中的经典问题“内网穿透”。
若规定必须用UDP协议,简单解决的话内网应备有一台有公网IP的服务器,命名为“服务器A”。由服务器A负责内网与客户端UDP协议数据交换,然后由“服务器A”与公网另一台“服务器B”再进行UDP协议的数据交换即可。
也就是整体架构设计上,增加一个公网与内网的中转站。
若是可以用TCP协议就不存在此问题了,内网“客户端”直接连接公网“服务器B”,并互发数据。
回答补充:
QQ是支持TCP协议的,你可以到QQ技术支持服务自己看http://service.qq.com/info/20038.html
QQ软件采用2种协议,UDP和TCP/IP协议,您可以在登陆设置中选择协议登录。
在用UDP协议时,QQ有专门措施防止数据丢失,发送数据之前它会ping对方主机,如果没有回复,就通过TCP协议服务器转发。
G. 服务器和客户端怎样传输数据面试题
客户端发出传输数据请求到服务器特定端口,服务器接到请求后,建立连接,传输数据。。。
H. socket编程服务器端接收数据
//服务端:
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;
Thread mythread ;
Socket socket;
// 清理所有正在使用的资源。
protected override void Dispose( bool disposing )
{
try
{
socket.Close();//释放资源
mythread.Abort ( ) ;//中止线程
}
catch{ }
if( disposing )
{
if (components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}
public static IPAddress GetServerIP()
{
IPHostEntry ieh=Dns.GetHostByName(Dns.GetHostName());
return ieh.AddressList[0];
}
private void BeginListen()
{
IPAddress ServerIp=GetServerIP();
IPEndPoint iep=new IPEndPoint(ServerIp,8000);
socket=new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
byte[] byteMessage=new byte[100];
this.label1.Text=iep.ToString();
socket.Bind(iep);
// do
while(true)
{
try
{
socket.Listen(5);
Socket newSocket=socket.Accept();
newSocket.Receive(byteMessage);
string sTime = DateTime.Now.ToShortTimeString ( ) ;
string msg=sTime+":"+"Message from:";
msg+=newSocket.RemoteEndPoint.ToString()+Encoding.Default.GetString(byteMessage);
this.listBox1.Items.Add(msg);
}
catch(SocketException ex)
{
this.label1.Text+=ex.ToString();
}
} // while(byteMessage!=null);
}
//开始监听
private void button1_Click(object sender, System.EventArgs e)
{
try
{
mythread = new Thread(new ThreadStart(BeginListen));
mythread.Start();
}
catch(System.Exception er)
{
MessageBox.Show(er.Message,"完成",MessageBoxButtons.OK,MessageBoxIcon.Stop);
}
}
//客户端:
using System.Net;
using System.Net.Sockets;
using System.Text;
private void button1_Click(object sender, System.EventArgs e)
{
BeginSend();
}
private void BeginSend()
{
string ip=this.txtip.Text;
string port=this.txtport.Text;
IPAddress serverIp=IPAddress.Parse(ip);
int serverPort=Convert.ToInt32(port);
IPEndPoint iep=new IPEndPoint(serverIp,serverPort);
byte[] byteMessage;
Socket socket=new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
socket.Connect(iep);
byteMessage=Encoding.ASCII.GetBytes(textBox1.Text);
socket.Send(byteMessage);
socket.Shutdown(SocketShutdown.Both);
socket.Close();
}
//基于TCP协议的发送和接收端
//TCP协议的接收端
using System.Net.Sockets ; //使用到TcpListen类
using System.Threading ; //使用到线程
using System.IO ; //使用到StreamReader类
int port = 8000; //定义侦听端口号
private Thread thThreadRead; //创建线程,用以侦听端口号,接收信息
private TcpListener tlTcpListen; //侦听端口号
private bool blistener = true; //设定标示位,判断侦听状态
private NetworkStream nsStream; //创建接收的基本数据流
private StreamReader srRead;
private System.Windows.Forms.StatusBar statusBar1;
private System.Windows.Forms.Button button1;
private System.Windows.Forms.ListBox listBox1; //从网络基础数据流中读取数据
private TcpClient tcClient ;
private void Listen ( )
{
try
{
tlTcpListen = new TcpListener ( port ) ; //以8000端口号来初始化TcpListener实例
tlTcpListen.Start ( ) ; //开始监听
statusBar1.Text = "正在监听" ;
tcClient = tlTcpListen.AcceptTcpClient ( ) ; //通过TCP连接请求
nsStream = tcClient.GetStream ( ) ; //获取用以发送、接收数据的网络基础数据流
srRead=new StreamReader(nsStream);//以得到的网络基础数据流来初始化StreamReader实例
statusBar1.Text = "已经连接!";
while( blistener ) //循环侦听
{
string sMessage = srRead.ReadLine();//从网络基础数据流中读取一行数据
if ( sMessage == "STOP" ) //判断是否为断开TCP连接控制码
{
tlTcpListen.Stop(); //关闭侦听
nsStream.Close(); //释放资源
srRead.Close();
statusBar1.Text = "连接已经关闭!" ;
thThreadRead.Abort(); //中止线程
return;
}
string sTime = DateTime.Now.ToShortTimeString ( ) ; //获取接收数据时的时间
listBox1.Items.Add ( sTime + " " + sMessage ) ;
}
}
catch ( System.Security.SecurityException )
{
MessageBox.Show ( "侦听失败!" , "错误" ) ;
}
}
//开始监听
private void button1_Click(object sender, System.EventArgs e)
{
thThreadRead = new Thread ( new ThreadStart ( Listen ) );
thThreadRead.Start();//启动线程
button1.Enabled=false;
}
// 清理所有正在使用的资源。
protected override void Dispose( bool disposing )
{
try
{
tlTcpListen.Stop(); //关闭侦听
nsStream.Close();
srRead.Close();//释放资源
thThreadRead.Abort();//中止线程
}
catch{}
if( disposing )
{
if (components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}
//TCP协议的发送端
using System.Net.Sockets; //使用到TcpListen类
using System.Threading; //使用到线程
using System.IO; //使用到StreamWriter类
using System.Net; //使用IPAddress类、IPHostEntry类等
private StreamWriter swWriter; //用以向网络基础数据流传送数据
private NetworkStream nsStream; //创建发送数据的网络基础数据流
private TcpClient tcpClient;
private System.Windows.Forms.Button button1;
private System.Windows.Forms.TextBox textBox1;
private System.Windows.Forms.Button button2;
private System.Windows.Forms.TextBox textBox2;
private System.Windows.Forms.StatusBar statusBar1;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.Label label2; //通过它实现向远程主机提出TCP连接申请
private bool tcpConnect = false; //定义标识符,用以表示TCP连接是否建立
//连接
private void button1_Click(object sender, System.EventArgs e)
{
IPAddress ipRemote ;
try
{
ipRemote = IPAddress.Parse ( textBox1.Text ) ;
}
catch //判断给定的IP地址的合法性
{
MessageBox.Show ( "输入的IP地址不合法!" , "错误提示!" ) ;
return ;
}
IPHostEntry ipHost ;
try
{
ipHost = Dns.Resolve ( textBox1.Text ) ;
}
catch //判断IP地址对应主机是否在线
{
MessageBox.Show ("远程主机不在线!" , "错误提示!" ) ;
return ;
}
string sHostName = ipHost.HostName ;
try
{
TcpClient tcpClient = new TcpClient(sHostName,8000);//对远程主机的8000端口提出TCP连接申请
nsStream = tcpClient.GetStream();//通过申请,并获取传送数据的网络基础数据流
swWriter = new StreamWriter(nsStream);//使用获取的网络基础数据流来初始化StreamWriter实例
button1.Enabled = false ;
button2.Enabled = true ;
tcpConnect = true ;
statusBar1.Text = "已经连接!" ;
}
catch
{
MessageBox.Show ( "无法和远程主机8000端口建立连接!" , "错误提示!" ) ;
return ;
}
}
//发送
private void button2_Click(object sender, System.EventArgs e)
{
if (textBox2.Text !="")
{
swWriter.WriteLine(textBox2.Text);//刷新当前数据流中的数据
swWriter.Flush();
}
else
{
MessageBox.Show("发送信息不能为空!","错误提示!");
}
}
// 清理所有正在使用的资源。
protected override void Dispose( bool disposing )
{
if ( tcpConnect )
{
swWriter.WriteLine ( "STOP" ) ; //发送控制码
swWriter.Flush (); //刷新当前数据流中的数据
nsStream.Close (); //清除资源
swWriter.Close ();
}
if( disposing )
{
if (components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
I. 在服务器端如何正确接收提交数据请编写代码。
你用过serlvet吗?post和get方式的最大区别就是post在地址栏是没有参数传递的,就是看不到参数的传递,而get就是在地址栏可以看到参数的传递。你这样写不对啊,如果需要表单提交的话可以action里面输入post就默认的是post方式了你要接受post的参数的话用request.getParameter("参数")来接受
J. TCP/IP连接中服务器发送[RST,ACK],客户端应该如何回应
1、首先,创建tcp服务器,创建的方式如下面图中所示,先创建一个net服务,然后监听connect和data事件,并对收到的数据进行确认,监听端口8431。