菜鸟学习Socket章节一
来源:互联网 发布:python 字符串 split 编辑:程序博客网 时间:2024/05/16 18:04
1.最近项目中需要用到Socket连接,就顺便学习了一下,希望能帮助大家
关于Socket的概念和功能可能可以写很长一篇博文来介绍,这里大家把Socket理解Tcp/IP协议的抽象,并且能够实现Tcp/IP协议栈的工具就行,换句话说,我们可以利用Socket实现客户端和服务端双向通信,同样,对于Socket最关键的理解还没到位,很多新人或者不常用的朋友会问:Socket到底功能是什么?怎么工作的?
再次举个例子,女友打电话给我,我可以选择连接,或者拒绝,如果我接了她的电话,也就是说,我和她通过电话连接(Connect),那电话就是“Socket”,女友和我都可以是客户端或服务端,只要点对点就行,我们的声音通过电话传递,但是具体传输内容不归Socket管辖范围,Socket的直接任务可以归纳为以下几点:
1.创建客户端或服务端
2.服务端或客户端监听是否有服务端或客户端传来的连接信息(Listening)
3.创建点对点的连接(Connect)
4.发送accept 信息给对方,表示两者已经建立连接,并且可以互相传递信息了(Send)
5.具体发送什么信息内容不是Socket管辖的范围,但是必须是Socket进行发送的动作
6.同理可以通过Socket去接受对方发来的信息,并加以处理
2.Socket协议类型:
TCP:
1 TCP是面向连接的通信协议,通过三次握手建立连接
2 TCP提供的是一种可靠的数据流服务,采用“带重传的肯定确认”技术来实现传输的可靠性
UDP:
1 UDP是面向无连接的通讯协议,UDP数据包括目的端口号和源端口号信息,由于通讯不需要连接,所以可以实现广播发送
2 UDP通讯时不需要接收方确认,属于不可靠的传输,可能会出丢包现象,实际应用中要求在程序员编程验证
001
//服务端的代码
002
class
Program
003
{
004
private
static
byte
[] bytes =
new
byte
[1024];
//声明一个字节数组这里我指定的大小为1024
005
private
static
int
port = 5000;
//自己设定一个端口号 1-65535 之间随意的数字(不要设一些我们经常使用的端口号比如说8080,800)
006
private
static
string
ipAddress =
"127.0.0.1"
;
//这里我绑定的IP地址就是我的本地的地址
007
private
static
Socket _socket;
008
static
void
Main(
string
[] args)
009
{
010
//服务器IP
011
IPAddress ip = IPAddress.Parse(ipAddress);
//将我的ip地址转换为IPAddress实例
012
_socket =
new
Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
//实例换一个Socket
013
014
_socket.Bind(
new
IPEndPoint(ip, port));
//绑定IP地址和端口号
015
016
_socket.Listen(50);
//设定最多50个排队连接请求
017
018
Thread serverThread =
new
Thread(ListenClientConnect);
019
020
serverThread.Start();
021
022
Console.ReadLine();
023
}
024
025
/// <summary>
026
/// 监听客户端的连接
027
/// </summary>
028
private
static
void
ListenClientConnect()
029
{
030
while
(
true
)
031
{
032
Socket _clientSocket = _socket.Accept();
033
_clientSocket.Send(Encoding.UTF8.GetBytes(
"Ni hao"
));
034
Thread recevieThread =
new
Thread(ReceiveMessage);
035
recevieThread.Start(_clientSocket);
036
}
037
}
038
039
//接收客户端发送的消息
040
private
static
void
ReceiveMessage(
object
clientSocket)
041
{
042
Socket myClientSocket = (Socket)clientSocket;
043
while
(
true
)
044
{
045
try
046
{
047
//通过clientSocket接收数据
048
int
receiveNo = myClientSocket.Receive(bytes);
049
Console.WriteLine(
"接收客户端{0}\t消息{1}\t"
, myClientSocket.RemoteEndPoint.ToString(), Encoding.UTF8.GetString(bytes, 0, receiveNo));
050
051
}
052
catch
(Exception e)
053
{
054
Console.WriteLine(e.Message);
055
myClientSocket.Shutdown(SocketShutdown.Both);
056
myClientSocket.Close();
057
break
;
058
}
059
}
060
}
061
}
062
063
064
065
066
067
//客户端的代码
068
class
Program
069
{
070
private
static
string
ip =
"127.0.0.1"
;
071
private
static
int
port = 5000;
072
private
static
byte
[] bytes =
new
byte
[1024];
073
private
static
Socket _clientSocket;
074
static
void
Main(
string
[] args)
075
{
076
try
077
{
078
IPAddress ipAdd = IPAddress.Parse(ip);
079
_clientSocket =
new
Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
080
_clientSocket.Connect(
new
IPEndPoint(ipAdd,port));
081
Console.WriteLine(
"服务器连接成功!!!!!!"
);
082
}
083
catch
(Exception e)
084
{
085
Console.WriteLine(
"服务器连接失败!!!!!"
);
086
Console.WriteLine(
"失败原因为"
+e.ToString());
087
}
088
089
int
receiveMessage = _clientSocket.Receive(bytes);
090
Console.WriteLine(
"接收到服务器的消息为{0}:"
,Encoding.UTF8.GetString(bytes,0,receiveMessage));
091
092
093
//通过客户端发送信息
094
for
(
int
i = 0; i < 10; i++)
095
{
096
string
msg =
"123 我是木头人"
+DateTime.Now;
097
_clientSocket.Send(Encoding.UTF8.GetBytes(msg));
098
Console.WriteLine(
"发送的消息为{0}"
,msg);
099
}
100
101
Console.Read();
102
}
103
104
105
106
}
107
<BR>
今天就到这吧,改天我们在学习另外一种连接方法
0 0
- 菜鸟学习Socket章节一
- linux学习笔记一(1~7章节)
- IM菜鸟学习之Socket聊天-客户端
- 菜鸟学习nodejs--Socket.IO即时通讯
- 菜鸟学习ios开发(一)
- 菜鸟学习串口通信一
- 小菜鸟学习SpringMVC(一)
- unity学习Socket(一)
- linux socket学习(一)
- unity学习Socket(一)
- linux socket学习(一)
- Socket学习(一)
- linux socket学习(一)
- socket API 学习一
- C++章节一作业
- [原创]一点一滴学习网络游戏开发,第一章节:初步了解ACE和SOCKET
- 菜鸟的C++学习(一)
- 菜鸟学习IHttpModule 接口笔记(一)
- Android中Webview使用自定义的javascript进行回调
- struts 2整合spring要注意的问题(二)
- bmp文件颜色表
- VS2010 Tips: How to change Local Help Library path
- Hibernate的一些相关信息
- 菜鸟学习Socket章节一
- js浮点数计算
- JBPM流程实例(PI)Process Instance
- Linux学习记录--匿名管道通讯
- 第7周作业1——背包问题。
- jquery ajax
- 【从零之四】运用Handler另起线程运行科大讯飞语音识别
- MapReduce编程实战之“工作原理”
- CakePhP AuthComponentd的使用