justonefirst

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
namespace UDPServer
{
   
class Program
    {
       
static void Main(string[] args)
        {
           
int recv;
           
byte[] data = new byte[1024];

           
//构建TCP 服务器

           
//得到本机IP,设置TCP端口号        
            IPEndPoint ipep = new IPEndPoint(IPAddress.Any , 8001);
            Socket newsock
= new Socket(AddressFamily.InterNetwork, SocketType.Dgram , ProtocolType.Udp);

           
//绑定网络地址
            newsock.Bind(ipep);

            Console.WriteLine(
"This is a Server, host name is {0}",Dns.GetHostName());

           
//等待客户机连接
            Console.WriteLine("Waiting for a client...");

           
//得到客户机IP
            IPEndPoint sender = new IPEndPoint(IPAddress.Any, 0);
            EndPoint Remote
= (EndPoint)(sender);
            recv
= newsock.ReceiveFrom(data, ref Remote);
            Console .WriteLine (
"Message received from {0}: ", Remote.ToString ());
            Console .WriteLine (Encoding .ASCII .GetString (data ,
0,recv ));

           
//客户机连接成功后,发送欢迎信息
            string welcome = "Welcome ! ";

           
//字符串与字节数组相互转换
            data  = Encoding .ASCII .GetBytes (welcome );

           
//发送信息
            newsock .SendTo (data ,data.Length ,SocketFlags .None ,Remote );
           
while (true )
            {
                data
=new byte [1024];
               
//发送接受信息
                recv =newsock.ReceiveFrom(data ,ref Remote);
                Console .WriteLine (Encoding .ASCII .GetString (data ,
0,recv));
                newsock .SendTo (data ,recv ,SocketFlags .None ,Remote );
            }
        }

        }
    }


++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.Net.Sockets;

namespace UDPClient
{
   
class Program
    {
       
static void Main(string[] args)
        {
           
byte[] data = new byte[1024];
           
string input ,stringData;

           
//构建TCP 服务器

            Console.WriteLine(
"This is a Client, host name is {0}", Dns.GetHostName()); //设置服务IP,设置TCP端口号
            IPEndPoint ipep = new IPEndPoint(IPAddress .Parse ("127.0.0.1") , 8001);

           
//定义网络类型,数据连接类型和网络协议UDP
            Socket server = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);

           
string welcome = "Hello! ";
            data
= Encoding.ASCII.GetBytes(welcome);
            server.SendTo(data, data.Length, SocketFlags.None, ipep);
            IPEndPoint sender
= new IPEndPoint(IPAddress.Any, 0);
            EndPoint Remote
= (EndPoint)sender;

            data
= new byte[1024];
           
int recv = server.ReceiveFrom(data, ref Remote);
            Console.WriteLine(
"Message received from {0}: ", Remote.ToString());
            Console.WriteLine(Encoding .ASCII .GetString (data,
0,recv));
           
while (true)
            {
                input
= Console .ReadLine ();
               
if (input =="exit")
                   
break ;
                server .SendTo (Encoding .ASCII .GetBytes (input ),Remote );
                data
= new byte [1024];
                recv
= server.ReceiveFrom(data, ref Remote);
                stringData
= Encoding.ASCII.GetString(data, 0, recv);
                Console.WriteLine(stringData);
            }
            Console .WriteLine (
"Stopping Client.");
            server .Close ();           
        }

        }
    }


+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//"开始"按钮事件

 
private void button1_Click(object sender, System.EventArgs e) {

  
//取得预保存的文件名

  
string fileName=textBox3.Text.Trim();

  
//远程主机

  
string hostName=textBox1.Text.Trim();

  
//端口

  
int port=Int32.Parse(textBox2.Text.Trim());

  
//得到主机信息

   IPHostEntry ipInfo
=Dns.GetHostByName(hostName);

  
//取得IPAddress[]

   IPAddress[] ipAddr
=ipInfo.AddressList;

  
//得到ip

   IPAddress ip
=ipAddr[0];

  
//组合出远程终结点

   IPEndPoint hostEP
=new IPEndPoint(ip,port);

  
//创建Socket 实例

   Socket socket
=new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);

  
try

   {

  
//尝试连接

   socket.Connect(hostEP);

   }

  
catch(Exception se)

   {

   MessageBox.Show(
"连接错误"+se.Message,"提示信息

   ,MessageBoxButtons.RetryCancel,MessageBoxIcon.Information);

  }

 
//发送给远程主机的请求内容串

 
string sendStr="GET / HTTP/1.1\r\nHost: " + hostName +

 
"\r\nConnection: Close\r\n\r\n";

  
//创建bytes字节数组以转换发送串

  
byte[] bytesSendStr=new byte[1024];

  
//将发送内容字符串转换成字节byte数组

   bytesSendStr
=Encoding.ASCII.GetBytes(sendStr);

 
try

  {

 
//向主机发送请求

  socket.Send(bytesSendStr,bytesSendStr.Length,
0);

  }

 
catch(Exception ce)

   {

   MessageBox.Show(
"发送错误:"+ce.Message,"提示信息

   ,MessageBoxButtons.RetryCancel,MessageBoxIcon.Information);

   }

  
//声明接收返回内容的字符串

  
string recvStr="";

  
//声明字节数组,一次接收数据的长度为1024字节

  
byte[] recvBytes=new byte[1024];

  
//返回实际接收内容的字节数

  
int bytes=0;

 
//循环读取,直到接收完所有数据

 
while(true)

  {

  bytes
=socket.Receive(recvBytes,recvBytes.Length,0);

 
//读取完成后退出循环

 
if(bytes〈=0)

 
break;

 
//将读取的字节数转换为字符串

  recvStr
+=Encoding.ASCII.GetString(recvBytes,0,bytes);

  }

 
//将所读取的字符串转换为字节数组

 
byte[] content=Encoding.ASCII.GetBytes(recvStr);

  
try

   {

  
//创建文件流对象实例

   FileStream fs
=new FileStream(fileName,FileMode.OpenOrCreate,FileAccess.ReadWrite);

 
//写入文件

  fs.Write(content,
0,content.Length);

  }

 
catch(Exception fe)

   {

   MessageBox.Show(
"文件创建/写入错误:"+fe.Message,"提示信息",MessageBoxButtons.RetryCancel,MessageBoxIcon.Information);

   }

  
//禁用Socket

   socket.Shutdown(SocketShutdown.Both);

  
//关闭Socket

   socket.Close();

   }

   }



+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
TCPClient
TCPClient 类提供了一种使用 TCP 协议连接到某个端点的简化方法。它还通过 NetworkStream 对象展现在连接过程中读取或写入的数据。请参见下面从 QuickStart 文档中摘录的日期/时间客户机示例。

使用 C# 编写
using System;
using System.Net;
using System.Net.Sockets;
using System.IO;
using System.Text;
class Client
{
public static void Main(String[] args)
{
TCPClient tcpc
= new TCPClient();
Byte[] read
= new Byte[32];
if (args.Length != 1)
{
Console.WriteLine(“请在命令行中指定服务器名称”);
return;
}
String server
= args[0];
// 验证服务器是否存在
if (DNS.GetHostByName(server) == null)
{
Console.WriteLine(“找不到服务器:”
+ 服务器);
return;
}
// 尝试连接到服务器
if (tcpc.Connect(server, 13) == -1)
{
Console.WriteLine(“无法连接到服务器:”
+ 服务器);
return;
}
// 获取流
Stream s = tcpc.GetStream();
// 读取流并将它转换为 ASCII 码形式
int bytes = s.Read(read, 0, read.Length);
String Time
= Encoding.ASCII.GetString(read);
// 显示数据
Console.WriteLine(“已接收到的” + 字节 + “字节”);
Console.WriteLine(“当前日期和时间是:”
+ 时间);
tcpc.Close();
}
}

TCPListener
TCPListener 类便于在来自某个客户机的 TCP 连接的特定套接字上进行侦听的工作。请参见下面包括在 QuickStart 文档中的日期
/时间服务器示例。

使用 C# 编写
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
class Server
{
public static void Main()
{
DateTime now;
String strDateLine;
Encoding ASCII
= Encoding.ASCII;
// 在端口 13 进行侦听
TCPListener tcpl = new TCPListener(13);
tcpl.Start();
Console.WriteLine(“正在等待客户进行连接”);
Console.WriteLine(“请按 Ctrl
+c 退出...”);
while (true)
{
// 接收会阻塞,直到有人连接上
Socket s = tcpl.Accept();
// 获取当前的日期和时间并将它连接成一个字符串
now = DateTime.Now;
strDateLine
= now.ToShortDateString() + " " +
now.ToLongTimeString();
// 将该字符串转换成一个字节数组并发送它
Byte[] byteDateLine =
ASCII.GetBytes(strDateLine.ToCharArray());
s.Send(byteDateLine, byteDateLine.Length,
0);
Console.WriteLine(“发送”
+ strDateLine);
}
}
}


http://topic.csdn.net/u/20080619/08/DCEF3FE2-F95B-4918-8EDB-36D48A3D0528.html
posted on 2008-06-24 09:02  Oscar Tan  阅读(675)  评论(0编辑  收藏  举报