
导读:可以传递结构体,比如:struct A{ int a; int b;};struct A a;send(s,(char)&a,sizeof(a),0);另一方接收到数据到buffer后,如buffer的字节长度为buufersize,则st
可以传递结构体,比如:
struct A
{
int a;
int b;
};
struct A a;
send(s,(char)&a,sizeof(a),0);
另一方接收到数据到buffer后,如buffer的字节长度为buufersize,则
struct b;
memcpy(&b, buffer, buffersize);
就传过去了。
ServerSocket ss = new ServerSocket();
Socket s = ssaccept();
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(sgetOutputStream()));
bwwrite("hello!");
首先建议使用一个线程向所有客户端发送消息;
在写一个方法发送消息, 方法里面需要 消息和socket 参数;
Thread tSend= new Thread(SendAll);
private void SendAll()
{
//遍历所有的Socket,调用Send(string msg,Socket socket)方法
//不知道你的Socket放到哪里,如果放到集合就遍历集合挨个调用
}
private void Send(string msg,Socket socket)
{
byte[] buffer = EncodingDefaultGetBytes(msg);
socketSend(buffer);
}
MyClient中的
String w = inreadLine();
这一句,调到
Systemoutprintln(w);前
就可以了。
你的想法是向SERVER发一个消息,SERVER回一个消息。
但你的CLIENT还没有发消息,你就开始接收,自然接收不到消息,程序就挂在那了。
发送:
private void button2_Click(object sender, EventArgs e)
{
if (sConnected == true)
{
try
{
string abc = textBox3Text;
sSend(EncodingASCIIGetBytes(abc));
MessageBoxShow("向服务器发送:" + abc);
}
catch
{
MessageBoxShow("发送失败");
}
}
}
接收:
SystemTimersTimer aTimer = new SystemTimersTimer();
byte[] res = new byte[1024];
private void Form1_Load(object sender, EventArgs e)
{
ControlCheckForIllegalCrossThreadCalls = false;
aTimerEnabled = false;
Thread thread1 = new Thread(TimerMange);
thread1IsBackground = true;
thread1Start();
}
void TimerMange()
{
aTimerElapsed += new ElapsedEventHandler(socket_rev); //定时事件的方法
aTimerInterval = 100;
}
private void socket_rev(object sender, EventArgs e)
{
int receiveLength = sReceive(res, resLength, SocketFlagsNone);
if (receiveLength > 0)
{
textBox4Text = EncodingASCIIGetString(res, 0, receiveLength);
string abc = "HaveReceive";
sSend(EncodingASCIIGetBytes(abc));
}
}
扩展资料:
C#Socket异步通讯学习
思路
1、Socket分为面向连接协议(如TCP)和无连接协议(如UDP)
2、Socket通信分为同步操作模式和异步操作模式,同步模式在建立连接之前/收到消息之前会阻塞当前进程,异步模式不会阻塞当前进程
综合以上两点,考虑到体验,当然是选择异步Socket啦,另外,这里使用的是面向连接的协议,那么实现思路大致如下:
1、创建Socket对象
2、绑定IP和端口
3、侦听连接
4、开始一个异步操作来接收一个接入的连接请求
5、处理接入的请求
6、向客户端发送消息
package Server;
import javaio;
import javanet;
import messageMessageType;
//该线程用于和客服端进行通信,是一个线程类
public class ServerClientComunicationThread extends Thread{
Socket s=null;
ObjectInputStream ois=null;
MessageType mt=null;
ObjectOutputStream oos=null;
public ServerClientComunicationThread(Socket s){
thiss=s;
}
public void run(){
//不停地从socket里面读取数据
while(true){
try {
ois=new ObjectInputStream(sgetInputStream());
mt=(MessageType)oisreadObject();
Systemoutprintln("服务器读取到的信息");
Systemoutprintln(mtgetContent()+" "+mtgetGetter()+" "+
mtgetMessagetype()+mtgetSendTime());
//将读取到的数据转发给对应的客服端
Systemoutprintln("从集合里面可以找到用户压迫将数据发送给"+ ManageOnlineUserhmget(mtgetGetter()));
oos=new ObjectOutputStream(( ManageOnlineUserhmget(mtgetGetter()))getOutputStream());
ooswriteObject(mt);
} catch (Exception e) {
eprintStackTrace();
}
}
}
}
public class TCPlient {
public static void main(String[] args) {
String str = null;
Socket clientSocket; // 创建客户端套接字
DataInputStream in = null; // 创建DataInputStream对象
DataOutputStream out = null; // 创建DataOutputStream对象
try {
clientSocket = new Socket("127001", 4331); // 实例化Socket对象
//clientSocket = new Socket("192168152139", 6379);
in = new DataInputStream(clientSocketgetInputStream()); // 实例化DataInputStream对象
// 实例化DataOutputStream对象
out = new DataOutputStream(clientSocketgetOutputStream());
outwriteUTF("你好!!"); // 写数据
while (true) {
str = inreadUTF(); // 读取流中数据
outwriteUTF(((int) (Mathrandom() 10) + 1) + ""); // 向流中写入0到10之间的随机数
Systemoutprintln("客户端收到:" + str); // 输出信息
Threadsleep(1000); // 线程休眠
}
} catch (Exception e) {
eprintStackTrace();
}
}
}
public class TCPServer {
public static void main(String[] args) {
ServerSocket serverSocket = null; // 创建服务器端套接字
Socket clientSocket = null; // 创建客户端套接字
String str = null;
DataOutputStream out = null; // 创建DataOutputStream类对象
DataInputStream in = null; // 创建DataInputStream类对象
try {
serverSocket = new ServerSocket(4331); // 实例化ServerSocket对象
clientSocket = serverSocketaccept(); // 接收客户的套接字连接呼叫
in = new DataInputStream(clientSocketgetInputStream()); // 实例化DataInputStream对象
out = new DataOutputStream(clientSocketgetOutputStream()); // 实例化DataOutputStream对象
while (true) {
str = inreadUTF(); // 读取客户放入连接中的信息
outwriteUTF("hello,我是服务器"); // 通过输出流向线路中写信息
outwriteUTF(str);
Systemoutprintln("服务器收到:" + str);
Threadsleep(1000); // 线程休眠
}
} catch (Exception e) {
eprintStackTrace();
}
}
}
//要发到另一个client,就让server转发消息就行。
把XML保存为字符串发送到客户端然后在客户端使用XMLDOCUMENT的Load方法,将字符串加载xmldocumentdoc=newxmldocument();docload(接收过来的字符串);下面你自己处理吧




















.jpg)
.jpg)





.jpg)





.jpg)





.jpg)