📄 socketclient.cs
字号:
using System;
using System.Collections.Generic;
using System.Text;
using System.Net.Sockets;
using System.IO;
using System.Net;
using System.Windows.Forms;
using System.Threading;
namespace SocketClient
{
public class Client: IClient
{
private IPAddress serverIP = IPAddress.Parse("127.0.0.1");
private IPEndPoint serverFullAddr;
private Socket socket;
private NetworkStream ns ;
private StreamReader sr ;
private StreamWriter sw ;
private string _receiveMsg;
public Client()
{
serverFullAddr = new IPEndPoint(serverIP, 1001);
socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
try
{
socket.Connect(serverFullAddr);
ns = new NetworkStream(socket);
MessageBox.Show("成功连接服务器!");
Thread t = new Thread(new ThreadStart(receiveMsg));
t.Name = "Receive Message";
//一个线程或者是后台线程或者是前台线程。后台线程与前台线程类似,区别是后台线//程不会防止进程终止。一旦属于某一进程的所有前台线程都终止,公共语言运行库就//会通过对任何仍然处于活动状态的后台线程调用 Abort 来结束该进程。
t.IsBackground = true;
t.Start();
}
catch (SocketException e)
{
MessageBox.Show("无法连接服务器!"+e.Message);
return;
}
}
public void receiveMsg()
{
try
{
while (true)
{
sr = new StreamReader(ns);
_receiveMsg = sr.ReadLine();
}
}
catch (Exception ex)
{
MessageBox.Show("Receive Message Error" + ex.Message);
}
}
public string ReceiceMsg
{
get
{
return _receiveMsg;
}
set
{
_receiveMsg = value;
}
}
#region IClient 成员
public string receiveMessage() { return ""; }
public void sendMessage(String message)
{
string input;
if (socket.Connected)
{
sw = new StreamWriter(ns);
input = message;
sw.WriteLine(input);
sw.Flush();
}
else
{
MessageBox.Show("请先连接服务器!");
}
}
#endregion
private void close()
{
sr.Close();
sw.Close();
ns.Close();
socket.Shutdown(SocketShutdown.Both);
socket.Close();
MessageBox.Show("disconnect from server");
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -