运行效果图如下:
Server:
1
using System;
2
using System.Collections.Generic;
3
using System.ComponentModel;
4
using System.Data;
5
using System.Drawing;
6
using System.Text;
7
using System.Windows.Forms;
8
using System.IO;
9
using System.Net;
10
using System.Net.Sockets;
11
using System.Threading;
12
13
namespace Server
14

{
15
public partial class FormServer : Form
16
{
17
private NetworkStream networkStream;
18
private StreamWriter streamWriter;
19
private StreamReader streamReader;
20
private Thread threadServer;
21
public FormServer()
22
{
23
InitializeComponent();
24
}
25
delegate void UpdateDelegate(string text);
26
void Update(string text)
27
{
28
if (InvokeRequired)
29
{
30
BeginInvoke(new UpdateDelegate(Update), new object[]
{ text });
31
return;
32
}
33
txtSended.Text += text;
34
}
35
private void FormServer_Load(object sender, EventArgs e)
36
{
37
threadServer = new Thread(new ThreadStart(StartServer));
38
threadServer.IsBackground = true;
39
threadServer.Start();
40
}
41
private void StartServer()
42
{
43
Int32 port = 1234;
44
IPAddress ipAddress = Dns.GetHostEntry("localhost").AddressList[0];
45
TcpListener tcpListener = new TcpListener(ipAddress, port);
46
tcpListener.Start();
47
Socket socketForClient= tcpListener.AcceptSocket();
48
string text=String.Empty;
49
try
50
{
51
if (socketForClient.Connected)
52
{
53
text="客户端已连接
\r\n";
54
text+="——————————————\r\n";
55
Update(text);
56
while (true)
57
{
58
networkStream = new NetworkStream(socketForClient);
59
streamWriter = new StreamWriter(networkStream);
60
streamReader = new StreamReader(networkStream);
61
string message=streamReader.ReadLine();
62
string time = DateTime.Now.Hour.ToString().Length == 1 ? "0" + DateTime.Now.Hour.ToString() : DateTime.Now.Hour.ToString() + ":";
63
time += DateTime.Now.Minute.ToString().Length == 1 ? "0" + DateTime.Now.Minute.ToString() : DateTime.Now.Minute.ToString();
64
time+=":";
65
time += DateTime.Now.Second.ToString().Length == 1 ? "0" + DateTime.Now.Second.ToString() : DateTime.Now.Second.ToString();
66
text = "客户端 " + time + "\r\n";
67
text += " " + message + "\r\n";
68
Update(text);
69
streamWriter.Flush();
70
}
71
}
72
socketForClient.Close();
73
}
74
catch (Exception ex)
75
{
76
MessageBox.Show(ex.Message.ToString());
77
}
78
}
79
private void btnClose_Click(object sender, EventArgs e)
80
{
81
this.Close();
82
}
83
private void btnSend_Click(object sender, EventArgs e)
84
{
85
if (String.IsNullOrEmpty(txtSending.Text.Trim()))
86
{
87
txtSending.Focus();
88
return;
89
}
90
streamWriter.WriteLine(txtSending.Text.Trim());
91
streamWriter.Flush();
92
string time = DateTime.Now.Hour.ToString().Length == 1 ? "0" + DateTime.Now.Hour.ToString() : DateTime.Now.Hour.ToString() + ":";
93
time += DateTime.Now.Minute.ToString().Length == 1 ? "0" + DateTime.Now.Minute.ToString() : DateTime.Now.Minute.ToString();
94
time += ":";
95
time += DateTime.Now.Second.ToString().Length == 1 ? "0" + DateTime.Now.Second.ToString() : DateTime.Now.Second.ToString();
96
txtSended.Text += "服务器 " + time+"\r\n";
97
txtSended.Text += " " + txtSending.Text.Trim() + "\r\n";
98
txtSending.Text = "";
99
txtSending.Focus();
100
}
101
102
private void txtSending_TextChanged(object sender, EventArgs e)
103
{
104
if (String.IsNullOrEmpty(txtSending.Text.Trim()))
105
btnSend.Enabled = false;
106
else
107
btnSend.Enabled = true;
108
}
109
}
110
}

2

3

4

5

6

7

8

9

10

11

12

13

14



15

16



17

18

19

20

21

22



23

24

25

26

27



28

29



30



31

32

33

34

35

36



37

38

39

40

41

42



43

44

45

46

47

48

49

50



51

52



53


54

55

56

57



58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75



76

77

78

79

80



81

82

83

84



85

86



87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103



104

105

106

107

108

109

110

Client:
1
using System;
2
using System.Collections.Generic;
3
using System.ComponentModel;
4
using System.Data;
5
using System.Drawing;
6
using System.Text;
7
using System.Windows.Forms;
8
using System.IO;
9
using System.Net;
10
using System.Net.Sockets;
11
using System.Collections;
12
using System.Threading;
13
14
namespace Client
15

{
16
public partial class FormClient : Form
17
{
18
private NetworkStream networkStream;
19
private StreamReader streamReader;
20
private StreamWriter streamWriter;
21
ArrayList sb;
22
TcpClient myclient;
23
private Thread threadClient;
24
bool flag = false;
25
public FormClient()
26
{
27
InitializeComponent();
28
sb = new ArrayList();
29
if (!flag) Connect();
30
networkStream = myclient.GetStream();
31
streamReader = new StreamReader(networkStream);
32
streamWriter = new StreamWriter(networkStream);
33
threadClient = new Thread(new ThreadStart(RecieveMessage));
34
threadClient.IsBackground = true;
35
threadClient.Start();
36
}
37
delegate void UpdateDelegate(string text);
38
private void Update(string text)
39
{
40
if (InvokeRequired)
41
{
42
BeginInvoke(new UpdateDelegate(Update), new object[]
{ text });
43
return;
44
}
45
txtSended.Text += text;
46
}
47
private void Connect()
48
{
49
try
50
{
51
Update("正在连接服务器
" + "\r\n");
52
myclient = new TcpClient("localhost", 1234);
53
Update("已成功连接服务器
" + "\r\n");
54
Update("——————————————\r\n");
55
}
56
catch
57
{
58
Update(string.Format("连接服务器{0}:1234失败.!\r\n", "localhost"));
59
}
60
flag = true;
61
}
62
private void RecieveMessage()
63
{
64
string text = String.Empty;
65
try
66
{
67
if (flag)
68
{
69
while (true)
70
{
71
string message = streamReader.ReadLine();
72
string time = DateTime.Now.Hour.ToString().Length == 1 ? "0" + DateTime.Now.Hour.ToString() : DateTime.Now.Hour.ToString() + ":";
73
time += DateTime.Now.Minute.ToString().Length == 1 ? "0" + DateTime.Now.Minute.ToString() : DateTime.Now.Minute.ToString();
74
time += ":";
75
time += DateTime.Now.Second.ToString().Length == 1 ? "0" + DateTime.Now.Second.ToString() : DateTime.Now.Second.ToString();
76
text = "服务器 " + time + "\r\n";
77
text += " " + message + "\r\n";
78
Update(text);
79
}
80
}
81
}
82
catch (Exception ex)
83
{
84
MessageBox.Show(ex.Message);
85
}
86
}
87
private void txtSending_TextChanged(object sender, EventArgs e)
88
{
89
if (String.IsNullOrEmpty(txtSending.Text.Trim()))
90
btnSend.Enabled = false;
91
else
92
btnSend.Enabled = true;
93
}
94
95
private void btnSend_Click(object sender, EventArgs e)
96
{
97
if (String.IsNullOrEmpty(txtSending.Text.Trim()))
98
{
99
txtSending.Focus();
100
return;
101
}
102
try
103
{
104
streamWriter.WriteLine(txtSending.Text.Trim());
105
streamWriter.Flush();
106
string time = DateTime.Now.Hour.ToString().Length == 1 ? "0" + DateTime.Now.Hour.ToString() : DateTime.Now.Hour.ToString() + ":";
107
time += DateTime.Now.Minute.ToString().Length == 1 ? "0" + DateTime.Now.Minute.ToString() : DateTime.Now.Minute.ToString();
108
time += ":";
109
time += DateTime.Now.Second.ToString().Length == 1 ? "0" + DateTime.Now.Second.ToString() : DateTime.Now.Second.ToString();
110
txtSended.Text += "客户端 " + time + "\r\n";
111
txtSended.Text += " "+txtSending.Text.Trim() + "\r\n";
112
txtSending.Text = "";
113
txtSending.Focus();
114
}
115
catch
116
{
117
MessageBox.Show("与服务器的连接已断开
\r\n");
118
}
119
120
}
121
122
private void btnClose_Click(object sender, EventArgs e)
123
{
124
this.Close();
125
}
126
}
127
}

2

3

4

5

6

7

8

9

10

11

12

13

14

15



16

17



18

19

20

21

22

23

24

25

26



27

28

29

30

31

32

33

34

35

36

37

38

39



40

41



42



43

44

45

46

47

48



49

50



51


52

53


54

55

56

57



58

59

60

61

62

63



64

65

66



67

68



69

70



71

72

73

74

75

76

77

78

79

80

81

82

83



84

85

86

87

88



89

90

91

92

93

94

95

96



97

98



99

100

101

102

103



104

105

106

107

108

109

110

111

112

113

114

115

116



117


118

119

120

121

122

123



124

125

126

127

由于篇幅原因窗体代码就不提供了..直接参考上面的窗体图.
txtSended为窗体中上边的文本框.
txtSending为窗体中下边的文本框.
btnSend为发送按钮.
btnClose为关闭按钮.