采用tcp协议,使用socket编程,编写程序完成客户端发送消息给服务端,服务端接到消息后,再发
服务端代码: /*server.c*/#include #include #include #include #include #include #include #include #define PORT4321#define BUFFER_SIZE 1024#define MAX_QUE_CONN_NM 5int main(){struct sockaddr_in server_sockaddr, client_sockaddr;int sin_size, recvbytes;int sockfd, client_fd;char buf[BUFFER_SIZE];/*建立socket连接*/if ((sockfd = socket(AF_INET,SOCK_STREAM,0))== -1){perror("socket");exit(1);}printf("Socket id = %dn",sockfd);/*设置sockaddr_in 结构体中相关参数*/server_sockaddr.sin_family = AF_INET;server_sockaddr.sin_port = htons(PORT);server_sockaddr.sin_addr.s_addr = INADDR_ANY;bzero(&(server_sockaddr.sin_zero), 8);int i = 1;/* 使得重复使用本地地址与套接字进行绑定 */setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &i, sizeof(i));/*绑定函数bind*/if (bind(sockfd, (struct sockaddr *)&server_sockaddr, sizeof(struct sockaddr))== -1){perror("bind");exit(1);}printf("Bind success!n");/*调用listen函数*/if (listen(sockfd, MAX_QUE_CONN_NM) == -1){perror("listen");exit(1);}printf("Listening....n");/*调用accept函数,等待客户端的连接*/if ((client_fd = accept(sockfd, (struct sockaddr *)&client_sockaddr, &sin_size)) == -1){perror("accept");exit(1);}/*调用recv函数接收客户端的请求*/memset(buf , 0, sizeof(buf));if ((recvbytes = recv(client_fd, buf, BUFFER_SIZE, 0)) == -1){perror("recv");exit(1);}printf("Received a message: %sn", buf);if ((sendbytes = send(sockfd, buf, strlen(buf), 0)) == -1){perror("send");exit(1);}close(sockfd);exit(0);}客户端:/*client.c*/#include #include #include #include #include #include #include #include #include #define PORT4321#define BUFFER_SIZE 1024int main(int argc, char *argv[]){int sockfd, sendbytes;char buf[BUFFER_SIZE];struct hostent *host;struct sockaddr_in serv_addr;if(argc < 3){fprintf(stderr,"USAGE: ./client Hostname(or ip address) Textn");exit(1);}/*地址解析函数*/if ((host = gethostbyname(argv[1])) == NULL){perror("gethostbyname");exit(1);}memset(buf, 0, sizeof(buf));sprintf(buf, "%s", argv[2]);/*创建socket*/if ((sockfd = socket(AF_INET,SOCK_STREAM,0)) == -1){perror("socket");exit(1);}/*设置sockaddr_in 结构体中相关参数*/serv_addr.sin_family = AF_INET;serv_addr.sin_port = htons(PORT);serv_addr.sin_addr = *((struct in_addr *)host->h_addr);bzero(&(serv_addr.sin_zero), 8);/*调用connect函数主动发起对服务器端的连接*/if(connect(sockfd,(struct sockaddr *)&serv_addr, sizeof(struct sockaddr))== -1){perror("connect");exit(1);}/*发送消息给服务器端*/if ((sendbytes = send(sockfd, buf, strlen(buf), 0)) == -1){perror("send");exit(1);}if ((recvbytes = recv(sockfd, buf, BUFFER_SIZE, 0)) == -1){perror("recv");exit(1);}close(sockfd);exit(0); }

linux c socket 客户端循环十次向服务器发送数据(tcp连接),为啥只能接受第一次的?求代码
只是做这些动作的话不需要多线程 找了下以前写的 改成了你说的10次发送client.c:#include#include#include#include#include#include#includeint main(int argc,char **argv){char wbuf[] = "hello server";char rbuf[128];int i;int sock; struct sockaddr_in server = {0}; struct timeval timeo;timeo.tv_sec= 0; timeo.tv_usec = 1000 * 1000; // socklen_t len = sizeof(timeo);if( argc != 2){printf("usage: ./client n");return -1;}sock = socket(AF_INET, SOCK_STREAM, 0);if(sock < 0){perror("Create TCP Socket");return -1;}setsockopt(sock, SOL_SOCKET, SO_SNDTIMEO, &timeo, len);server.sin_family = AF_INET;server.sin_port = htons(30000);inet_pton(AF_INET,argv[1], &(server.sin_addr));int res = connect(sock, (struct sockaddr*)&server, sizeof(server));if (res < 0){if(res == EINPROGRESS)perror("connecting stream socket time out:");elseperror("connecting stream socket error:");close(sock);return -1;}else{printf("Connect Server@%sn",argv[1]);for(i=0;i<10;i++){int wsize = send(sock,wbuf,sizeof(wbuf),0);if(wsize<=0){perror("write error:");close(sock);return -1;}printf("1111111i=%dn",i);while(1){ int rsize=recv(sock,rbuf,sizeof(rbuf),0); if(rsize>0){rbuf[rsize]=' ';printf("recv msg from server: %sn",rbuf);break;}if(rsize<0){close(sock);perror("read error:");return -1;}}}close(sock);return 0;}}server.c:#include#include#include#include#include#include#includeint main(int argc, char** argv){intlistenfd, connfd;struct sockaddr_in servaddr = {0};charrbuf[128];charwbuf[] = "hello client";int n;if( (listenfd = socket(AF_INET, SOCK_STREAM, 0)) == -1 ){perror("Create TCP Socket");return -1;}servaddr.sin_family = AF_INET;servaddr.sin_addr.s_addr = htonl(INADDR_ANY);servaddr.sin_port = htons(30000);if( bind(listenfd, (struct sockaddr*)&servaddr, sizeof(servaddr)) == -1){perror("bind socket error:");return -1;}if( listen(listenfd, 10) == -1){perror("listen socket error:");return -1;}printf("======waiting for client's request======n");while(1){if( (connfd = accept(listenfd, (struct sockaddr*)NULL, NULL)) == -1){perror("accept socket error:");continue;}while(1){n = recv(connfd, rbuf, sizeof(rbuf), 0);if(n>0){rbuf[n] = ' ';printf("recvmsg from client: %sn", rbuf);n = send(connfd, wbuf, sizeof(wbuf),0);if(n<=0){perror("sned error:");close(connfd);break;}}else if(n < 0){perror("recv error:");close(connfd);break;}}close(connfd);}close(listenfd);return 0;}运行的时候 client./client 你的serverip 端口我用的30000 写死在程序里了
你想实现相互通讯的话,必须要起线程或者进程。线程比较麻烦,建议先研究进程吧。server收到服务端链接后,fork()一个进程,该进程对这一个客户端进行服务。 一般咱们都是堵塞的收发数据,都是服务端fork()一个进程后,调用读read操作,如收到数据(客户端请求),给予反馈,向客户端send数据。客户端成功链接后,发送数据,然后等待反馈。只能一个收,收到后在发,一直堵塞。当然也有非堵塞模式,这个关系超时操作,你先研究简单的吧。你要做到类似qq的东西,那只能多进程并发,就是一个进程发送,一个进程收取。用fork函数。也就是,客户端和服务端收发数据都分别fork一个进程。 不知是不是你想要的答案。我的代码不能给你,给你个开源的,cppsocket,比较难。自己下载,可以参考下。
你尝试下客户端发送的10次之间加入间隔;看看下效果再说

求TCP/IP client server socket的JAVA代码
我这刚好有一个,给你参考一下:(分客户端和服务器两个小程序) //客户端程序及聊天室的图形用户界面import java.awt.event.*;import javax.swing.*;import java.io.*;import java.net.InetAddress;import java.net.Socket;public class ChatTCPSocketJFrame extends JFrame implements ActionListener{private String name; //网名private Socket socket; //TCP Socket对象private JTextArea text_receiver; //显示对话内容的文本区private JTextField text_sender;//输入发送内容的文本行private JButton button_send,button_leave;//发送和离线按钮private PrintWriter cout;//字符输出流对象public ChatTCPSocketJFrame(String name, Socket socket) throws IOException//提供图形用户界面{super("聊天室"+name+""+InetAddress.getLocalHost()+" : "+socket.getLocalPort());this.setBounds(320,240,400,240);this.setDefaultCloseOperation(EXIT_ON_CLOSE);this.text_receiver = new JTextArea();this.text_receiver.setEditable(false); //文本区不可编辑this.getContentPane().add(new JScrollPane(this.text_receiver));JPanel panel = new JPanel();this.getContentPane().add(panel,"South");this.text_sender = new JTextField(16);panel.add(this.text_sender);button_send = new JButton("发送");panel.add(button_send);button_send.addActionListener(this);button_leave = new JButton("离线");panel.add(button_leave);button_leave.addActionListener(this);this.setVisible(true);this.name = name;this.socket = socket;this.cout = new PrintWriter(socket.getOutputStream(),true);//获得Socket对象的输出流,立即flushthis.cout.println(name); //发送自己网名给对方BufferedReader cin=new BufferedReader(new InputStreamReader(socket.getInputStream()));//获得Socket对象的输入流,创建字符输入流String aline=cin.readLine(); //接收到对方网名text_receiver.append("连接"+aline+"成功"+"rn"); //显示对方发来的内容aline= cin.readLine();while (aline!=null && !aline.equals("bye"))//从输入流接收对方发来的字符串{//"bye"是约定的离线信息text_receiver.append(aline+"rn");//显示对方发来的内容aline= cin.readLine();}cin.close();cout.close();socket.close();//关闭Socket连接button_send.setEnabled(false);button_leave.setEnabled(false);}public ChatTCPSocketJFrame(String name, String host, int port) throws IOException //客户端{this(name, new Socket(host, port));//客户端向指定主机的端口发出TCP连接请求}public void actionPerformed(ActionEvent e){if (e.getSource()==button_send)//发送按钮{this.cout.println(name+" 说:"+text_sender.getText()); //通过流发送给对方text_receiver.append("我说:"+text_sender.getText()+"n");text_sender.setText("");}if (e.getSource()==button_leave) //离线{text_receiver.append("我离线n");this.cout.println(name+"离线n"+"bye");//发送给对方离线约定button_send.setEnabled(false);button_leave.setEnabled(false);}}public static void main(String args[]) throws IOException{new ChatTCPSocketJFrame("小蜜蜂", "127.0.0.1", 2001);}}//服务端程序import java.net.*;import java.io.*;public class ChatTCPServer{public ChatTCPServer(int port, String name) throws IOException //约定端口、网名{//本机IP地址和指定端口构成服务端的SocketServerSocket server = new ServerSocket(port);//ServerSocket提供TCP连接服务Socket client = server.accept(); //等待接收客户端的连接申请new ChatTCPSocketJFrame(name,client);//服务端的聊天室,图形用户界面同客户端server.close();}public static void main(String args[]) throws IOException{new ChatTCPServer(2001, "花仙子");//启动服务端,约定端口,指定网名} }
到底要表达什么意思嘛
生活(

C++ TCP客户端代码怎么写?
C++ TCP客户端代码写法:客户端编程的步骤:1:加载套接字库,创建套接字(WSAStartup()/socket());2:向服务器发出连接请求(connect());3:和服务器端进行通信(send()/recv());4:关闭套接字,关闭加载的套接字库(closesocket()/WSACleanup())。代码:#include #include #pragma comment(lib,"WS2_32.lib")void main(){ WORD wVersionRequested; WSADATA wsaData; int err; wVersionRequested = MAKEWORD(1,1); err = WSAStartup(wVersionRequested,&wsaData); if (err !=0) { return; } if (LOBYTE(wsaData.wVersion) != 1|| HIBYTE( wsaData.wVersion ) != 1 ) { WSACleanup(); return; } SOCKET sockSrv = socket(AF_INET,SOCK_STREAM,0); SOCKADDR_IN addrSrv; addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY); addrSrv.sin_family=AF_INET; addrSrv.sin_port=htons(6000); bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR)); listen(sockSrv,5); SOCKADDR_IN addrClient; int len=sizeof(SOCKADDR); while(1) { SOCKET sockConn=accept(sockSrv,(SOCKADDR*)&addrClient,&len); char sendBuf[50]; sprintf(sendBuf,"Welcome %s to here!",inet_ntoa(addrClient.sin_addr)); send(sockConn,sendBuf,strlen(sendBuf)+1,0); char recvBuf[50]; recv(sockConn,recvBuf,50,0); printf("%sn",recvBuf); closesocket(sockConn); }}
#include #include void main(){WORD wVersionRequested;WSADATA wsaData;int err;wVersionRequested = MAKEWORD( 1, 1 );err = WSAStartup( wVersionRequested, &wsaData );if ( err != 0 ) {return;}if ( LOBYTE( wsaData.wVersion ) != 1 ||HIBYTE( wsaData.wVersion ) != 1 ) {WSACleanup( );return;}SOCKET sockClient=socket(AF_INET,SOCK_STREAM,0);SOCKADDR_IN addrSrv;addrSrv.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");addrSrv.sin_family=AF_INET;addrSrv.sin_port=htons(6000);connect(sockClient,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));char recvBuf[100];recv(sockClient,recvBuf,100,0);printf("%sn",recvBuf);send(sockClient,"This is lisi",strlen("This is lisi")+1,0);closesocket(sockClient);WSACleanup(); }

TCP客户端程序源代码如何编写?
int client() { system("color 0a"); //修改DOS窗口颜色,是其成0A。 WORD wVersion=MAKEWORD(1,1);WSADATA wsData;int nResult= WSAStartup(wVersion,&wsData); //启动WINSOCKETif(nResult !=0){printf("启动Winsock失败!n");}SOCKET sc=socket(AF_INET,SOCK_STREAM,IPPROTO_IP); //创建套接字 if(sc==INVALID_SOCKET){printf("创建套接字失败!n");}SOCKADDR_IN addrSc; addrSc.sin_family=AF_INET;addrSc.sin_port=htons(portNum); //保证字节顺序char IP[20]; again: printf("请输入服务器的IP地址:"); gets(IP);if( -1==inet_addr(IP) ) //循环检测IP地址是否合法 { printf("IP地址错误!n"); goto again; } addrSc.sin_addr.S_un.S_addr=inet_addr(IP);int b=0; while(b<5) //检测5次,如果服务器在此时间内启动,则进行连接 { nResult=connect(sc,(SOCKADDR*)&addrSc,sizeof(SOCKADDR)); //套接字连接 Sleep((DWORD)100); //延时1秒 if(nResult==SOCKET_ERROR){printf(" %d 次连接失败!n",b+1); } else break; b++; } if(nResult==SOCKET_ERROR) { printf("登陆超时,请重新登陆!n"); goto again; } char *buf="连接成功!"; //向服务端验证连接成功 nResult=send(sc,buf,strlen(buf)+1,0);if(nResult==SOCKET_ERROR) {printf("5.套接字发送数据失败!n"); return 0; } char mess[M]; nResult =recv(sc,mess,strlen(mess),0); //接受服务端的连接验证信息 if(nResult == -1 ) //判断服务端是否关闭 { printf("n服务端已断开n"); system("pause"); exit(0); } printf("%sn",mess); tianle:system("cls"); //清屏 puts("nn"); puts(" * * "); puts(" * 欢·迎·使·用·局·域·网·文·件·发·送·工·具 *"); puts(" * (客 户 端) * "); puts(" * * "); puts(" * * "); puts(" * 请等待服务端的相应操作 * "); puts(" * * "); puts(" * * "); puts(" * 天乐软件工作室制作 * "); puts(" * 2008-3-1 * "); puts(" * 版权所有★欢迎传播 * "); puts("全屏(退出全屏)操作请按:ALT+ENTERn"); char rMess[100]; nResult=recv(sc,rMess,strlen(rMess),0); //接收服务端发来的操作请求 if(nResult==-1) //判断服务端是否关闭 { printf("n服务端已断开n"); system("pause"); goto tianle; } printf("%sn",rMess); char ch; char str[100]; gets(str); ch=str[0]; while( ch!='Y' && ch!='y' && ch!='N' && ch!='n' ) //处理客户端的错误输入 { printf("输入有误,请重新输入(Y/N):"); gets(str); ch=str[0]; }send(sc,&ch,sizeof(char),0); //向服务端反馈选择,并执行相应操作 if(strcmp(rMess,"服务端向你传送文件,是否接受(Y/N):")==0 && (ch=='Y' || ch=='y') ) { receiveFile(sc); } if(strcmp(rMess,"服务端向你发起聊天,是否接受(Y/N):")==0 && (ch=='Y' || ch=='y') ) { chatting_client(sc); } if(ch=='N' || ch=='n') { printf("你拒绝了!n"); system("pause"); }system("cls"); goto tianle; nResult=closesocket(sc); //关闭套接字 if(nResult==SOCKET_ERROR){printf("8.关闭套接字失败!n"); return 0; }} 满意请采纳

本文由 在线网速测试 整理编辑,转载请注明出处。