python socket编程多线程_多线程和Socket网络编程(一)|简明python教程|python入门|python教程...

进程:每一个应用程序都当做一个进程。

b6c0bed91d7b5cdbda6699e712157b1b.gif

d16a263278f078919e3738def5ec97f6.gif

usingSystem;usingSystem.Diagnostics;namespaceConsoleApp2

{classProgram

{static void Main(string[] args)

{foreach (var item inProcess.GetProcesses())

{//关闭进程,可能先要获取权限

item.Kill();

Console.WriteLine(item);

}//打开程序

Process.Start("calc");

Process.Start("iexplore");//打开详细的文件

ProcessStartInfo startInfo = new ProcessStartInfo(@"C:\Users\bibi\Desktop\工作.xlsx");

Process process= newProcess();

process.StartInfo=startInfo;

process.Start();

}

}

}

d16a263278f078919e3738def5ec97f6.gif

线程:其他子线程的创建可以有效避免UI主线程的卡死,线程分前台线程和后台线程,当所有前台线程已经关闭,后台线程自动关闭。跨线程访问UI主线程要注意UI主线程的销毁可能带来的异常。销毁掉的线程无法重启。

b6c0bed91d7b5cdbda6699e712157b1b.gif

d16a263278f078919e3738def5ec97f6.gif

usingSystem;usingSystem.Threading;usingSystem.Windows.Forms;namespaceWindowsFormsApp2

{public partial classForm1 : Form

{publicForm1()

{

InitializeComponent();

}

Thread thread;private void button1_Click(objectsender, EventArgs e)

{//创建一个子线程,传入方法。

thread = new Thread(() =>{for (int i = 0; i < 10000; i++)

{

Console.WriteLine(i);

}

});//1、设置线程为后台线程 2、标记线程就绪,何时执行由CPU决定。

thread.IsBackground = true;

thread.Start();

}private void Form1_FormClosing(objectsender, FormClosingEventArgs e)

{if (thread != null)

{

thread.Abort();

}

}private void Form1_Load(objectsender, EventArgs e)

{//取消跨线程调用的检查

Control.CheckForIllegalCrossThreadCalls = false;

}

}

}

d16a263278f078919e3738def5ec97f6.gif

线程方法传参:方法的参数类型必须为Object。

Socket:程序与程序直接的一种通信机制,也称“套字节”。通过Socket需要知道程序对应的ip地址和端口。Socket涉及协议TCP或UDP,TCP三次握手、安全稳定、效率低,UDP容易发生数据丢失、效率高。

服务端使用Socket步骤:1、Bind函数绑定监听端点,2、Listen函数设置监听队列(在某个时间内允许的最多连接数)3、Accept函数等待接收客户端的连接

4、放进后台线程等待客户端的连接,每有一个新的连接,就创建一个新的Socket,使用“While(true){...等待客户端的连接...}”,5、使用Receive函数接收客户端发过来的消息,如果客户端下线了,接收到的消息为空即0字节。

b6c0bed91d7b5cdbda6699e712157b1b.gif

d16a263278f078919e3738def5ec97f6.gif

private void button1_Click(objectsender, EventArgs e)

{

Socket socket= newSocket(SocketType.Stream,ProtocolType.Tcp);

IPAddress ip=IPAddress.Any;

IPEndPoint endPoint= new IPEndPoint(ip, 8083);

socket.Bind(endPoint);

MessageBox.Show("监听成功");

socket.Listen(10);//等待客户端的连接

Socket socketSend =socket.Accept();

MessageBox.Show(socketSend.RemoteEndPoint.ToString()+"连接成功");//客户端连接成功后,服务器可以收到客户端发送过来的消息。

byte[] buffer = new byte[1024 * 1024 * 2];int r =socketSend.Receive(buffer);//获取客户端发过来的字符串

string str = Encoding.UTF8.GetString(buffer, 0, r);

}

d16a263278f078919e3738def5ec97f6.gif

客户端使用Socket步骤:1、Connect函数连接服务端,2、Send函数发送消息(服务端发送消息给客户端,也是使用客户端的Socket来Send字节),3、Receive函数接收服务端发送过来的消息

b6c0bed91d7b5cdbda6699e712157b1b.gif

d16a263278f078919e3738def5ec97f6.gif

Socket socket = newSocket(SocketType.Stream,ProtocolType.Tcp);

IPAddress ip= IPAddress.Parse("192.169.11.87");

IPEndPoint endPoint= new IPEndPoint(ip, 5000);

socket.Connect(endPoint);string msg = "消息来了";byte[] buffer =Encoding.UTF8.GetBytes(msg);

socket.Send(buffer);

d16a263278f078919e3738def5ec97f6.gif

Socket和多线程一起运用的聊天举例:

在服务端中,服务端开启一个后台线程不停的新的客户端连接,每个客户端连接Socket都单独开启一个后台线程来接收客户端发送过来的消息。

在客户端中,开启一个后台线程来接收服务器发送过来的消息。


版权声明:本文为weixin_28866303原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。